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:



Below is the implementation of the above approach:

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

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

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

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



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.





Article Tags :
Practice Tags :