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.

Recommended: Please try your approach on {IDE} first, before moving on to the solution.

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

 # 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# 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 v = new List();                 // 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

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 :