Related Articles

# 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