# Maximum number of contiguous array elements with same number of set bits

• Difficulty Level : Basic
• Last Updated : 11 May, 2021

Given an array with n elements. The task is to find the maximum number of contiguous array elements which have the same number of set bits.
Examples

```Input : arr[] = {14, 1, 2, 32, 12, 10}
Output : 3
Elements 1, 2, 32 have same number of set bits
and are contiguous.

Input : arr[] = {1, 6, 9, 15, 8}
Output : 2
Elements 6, 9 have same number of set bits.```

Approach:

• Traverse the array from left to right and store the number of set bits of each element in a vector.
• Our task is reduced in finding the longest chain of same elements in this vector.
• Maintain two variables, current_count and max_count. Initialise both of them with 1.
• Traverse the vector and check if current element is same as previous element. If it is same, increment current_count. If it is not same, then reinitialize current_count with 1.
• At each step, max_count must be assigned maximum value between max_count and current_count.
• Final value of max_count is the answer.

Below is the implementation of the above approach:

## C++

 `// C++ program to find the maximum number of` `// contiguous array elements with same` `// number of set bits` `#include ` `using` `namespace` `std;`   `// Function to find maximum contiguous elements` `// with same set bits` `int` `sameSetBits(``int` `arr[], ``int` `n)` `{` `    ``vector<``int``> v;`   `    ``// Insert number of set bits in each element` `    ``// of the array to the vector` `    ``// __builtin_popcount() function returns the number` `    ``// of set bits in an integer in C++` `    ``for` `(``int` `i = 0; i < n; i++)` `        ``v.push_back(__builtin_popcount(arr[i]));`   `    ``int` `current_count = 1, max_count = 1;`   `    ``// Finding the maximum number of same` `    ``// contiguous elements` `    ``for` `(``int` `i = 1; i < v.size(); i++) {` `        ``if` `(v[i + 1] == v[i])` `            ``current_count++;` `        ``else` `            ``current_count = 1;`   `        ``max_count = max(max_count, current_count);` `    ``}`   `    ``// return answer` `    ``return` `max_count;` `}`   `// Driver code` `int` `main()` `{` `    ``int` `arr[] = { 9, 75, 14, 7, 13, 11 };` `    ``int` `n = ``sizeof``(arr) / ``sizeof``(arr);`   `    ``cout << sameSetBits(arr, n);`   `    ``return` `0;` `}`

## Java

 `// Java program to find the maximum ` `// number of contiguous array elements` `// with same number of set bits` `import` `java.io.*;` `import` `java.util.*;`   `class` `GFG` `{` `    `  `    ``// Function to find maximum contiguous` `    ``// elements with same set bits` `    ``static` `int` `sameSetBits(``int` `arr[], ``int` `n)` `    ``{` `        ``Vector v = ``new` `Vector<>();` `    `  `        ``// Insert number of set bits in each element` `        ``// of the array to the vector` `                ``for` `(``int` `i = ``0``; i < n; i++)` `        ``{` `            ``int` `count = Integer.bitCount(arr[i]);` `            ``v.add(count);` `        ``}` `    `  `        ``int` `current_count = ``1``, max_count = ``1``;` `    `  `        ``// Finding the maximum number of same` `        ``// contiguous elements` `        ``for` `(``int` `i = ``1``; i < v.size()-``1``; i++)` `        ``{` `            ``if` `(v.get(i + ``1``) == v.get(i))` `                ``current_count++;` `            ``else` `                ``current_count = ``1``;` `    `  `            ``max_count = Math.max(max_count, current_count);` `        ``}` `    `  `        ``// return answer` `        ``return` `max_count;` `    ``}` `    `  `    ``// Driver code` `    ``public` `static` `void` `main (String[] args) ` `    ``{` `        ``int` `arr[] = { ``9``, ``75``, ``14``, ``7``, ``13``, ``11` `};` `        ``int` `n = arr.length;` `        ``System.out.println(sameSetBits(arr, n));` `    ``}` `}`   `// This code is contributed by Archana_kumari`

## Python3

 `# Python 3 program to find the maximum ` `# number of contiguous array elements ` `# with same number of set bits`   `# Function to find maximum contiguous` `# elements with same set bits` `def` `sameSetBits(arr, n):` `    ``v ``=` `[]`   `    ``# Insert number of set bits in each ` `    ``# element of the array to the vector` `    `  `    ``# function returns the number of set ` `    ``# bits in an integer ` `    ``for` `i ``in` `range``(``0``, n, ``1``):` `        ``v.append(``bin``(arr[i]).count(``'1'``))`   `    ``current_count ``=` `1` `    ``max_count ``=` `1`   `    ``# Finding the maximum number of same` `    ``# contiguous elements` `    ``for` `i ``in` `range``(``1``, ``len``(v) ``-` `1``, ``1``):` `        ``if` `(v[i ``+` `1``] ``=``=` `v[i]):` `            ``current_count ``+``=` `1` `        ``else``:` `            ``current_count ``=` `1`   `        ``max_count ``=` `max``(max_count, ` `                        ``current_count)` `    `  `    ``# return answer` `    ``return` `max_count`   `# Driver code` `if` `__name__ ``=``=` `'__main__'``:` `    ``arr ``=` `[``9``, ``75``, ``14``, ``7``, ``13``, ``11``]` `    ``n ``=` `len``(arr)`   `    ``print``(sameSetBits(arr, n))`   `# This code is contributed by` `# Surendra_Gangwar`

## C#

 `// C# program to find the maximum ` `// number of contiguous array elements ` `// with same number of set bits ` `using` `System;` `using` `System.Collections.Generic;`   `class` `GFG ` `{ ` `    `  `    ``// Function to find maximum contiguous ` `    ``// elements with same set bits ` `    ``static` `int` `sameSetBits(``int` `[]arr, ``int` `n) ` `    ``{ ` `        ``List<``int``> v = ``new` `List<``int``>(); ` `    `  `        ``// Insert number of set bits in each element ` `        ``// of the array to the vector ` `        ``for` `(``int` `i = 0; i < n; i++) ` `        ``{ ` `            ``int` `count = Bitcount(arr[i]); ` `            ``v.Add(count); ` `        ``} ` `    `  `        ``int` `current_count = 1, max_count = 1; ` `    `  `        ``// Finding the maximum number of same ` `        ``// contiguous elements ` `        ``for` `(``int` `i = 1; i < v.Count-1; i++) ` `        ``{ ` `            ``if` `(v[i + 1] == v[i]) ` `                ``current_count++; ` `            ``else` `                ``current_count = 1; ` `    `  `            ``max_count = Math.Max(max_count, current_count); ` `        ``} ` `    `  `        ``// return answer ` `        ``return` `max_count; ` `    ``}` `    `  `    ``static` `int` `Bitcount(``int` `n)` `    ``{` `        ``int` `count = 0;` `        ``while` `(n != 0)` `        ``{` `            ``count++;` `            ``n &= (n - 1);` `        ``}` `        ``return` `count;` `    ``} ` `    `  `    ``// Driver code ` `    ``public` `static` `void` `Main (String[] args) ` `    ``{ ` `        ``int` `[]arr = { 9, 75, 14, 7, 13, 11 }; ` `        ``int` `n = arr.Length; ` `        ``Console.WriteLine(sameSetBits(arr, n)); ` `    ``} ` `} `   `// This code has been contributed by 29AjayKumar`

## Javascript

 ``

Output:

`4`

My Personal Notes arrow_drop_up
Recommended Articles
Page :