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

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++

filter_none

edit
close

play_arrow

link
brightness_4
code

// C++ program to find the maximum number of
// contiguous array elements with same
// number of set bits
#include <bits/stdc++.h>
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[0]);
  
    cout << sameSetBits(arr, n);
  
    return 0;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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<Integer> 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

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# 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

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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

chevron_right


Output:

4


My Personal Notes arrow_drop_up

Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.