Maximum number of contiguous array elements with same number of set bits in C++


We are given with an unsorted array of integer elements and the task is to calculate the two major things i.e.

  • Elements with same number of set bits
  • Also, Elements with the same set bits should be contiguous in nature.

Input

int arr[] = { 5, 8, 1, 2, 9, 12}

Output − Maximum number of contiguous array elements with same number of set bits are − 3

Explanation − we will calculate the binary digits for the elements of an array and calculate their set bits.

arr[0] = 5 => 0101 => total set bits are -: 2
arr[1] = 8 => 1000 => total set bits are -: 1
arr[2] = 1 => 0001 => total set bits are -: 1
arr[3] = 2 => 0010 => total set bits are -: 1
arr[4] = 9 => 1001 => total set bits are -: 2
Arr[5] = 12 => 1100 => total set bits are -: 2

So the elements with the same number of set bits and also contiguous in nature are 5, 9 and 12. So the maximum number of contiguous array elements with same number of set bits are 3

Input − int arr[] = { 5, 8, 1, 2}

Output − Maximum number of contiguous array elements with same number of set bits are − 2

Explanation − we will calculate the binary digits for the elements of an array and calculate their set bits.

arr[0] = 5 => 0101 => total set bits are -: 2
arr[1] = 8 => 1000 => total set bits are -: 1
arr[2] = 1 => 0001 => total set bits are -: 1
arr[3] = 2 => 0010 => total set bits are -: 1

So the elements with the same number of set bits and also contiguous in nature are 1 and 2. So the maximum number of contiguous array elements with same number of set bits are 2

Approach used in the below program is as follows

  • Input the array elements of integer type

  • Calculate the size of an array using size function and pass it to the function

  • Take a temporary variable and set it to value 1 and also a maximum variable with the value 1.

  • Create a variable vec of type vector

  • Start the loop for from 0 till the size of an array

  • Calculate the binary set bits of array elements using “__builtin_popcount(element)” function that will return the total number of set bits of a given element passed to it and keep storing the count into the vector.

  • Start loop for from 1 till size of a vector

  • Inside the vector, check if vec[i+1] = vec[i] then increment the value of temp by 1

  • Else, set temp to 1

  • Set maximum with choosing the max value between temp and maximum using the max function.

  • Return the maximum variable

  • Print the result.

Example

 Live Demo

#include <bits/stdc++.h>
using namespace std;
//function to calculate maximum same number of bits
int maximum_SameBits(int arr[], int size){
   int temp = 1;
   int maximum = 1;
   vector<int> vec;
   for (int i = 0; i < size; i++){
      vec.push_back(__builtin_popcount(arr[i]));
   }
   for (int i = 1; i < vec.size(); i++){
      if (vec[i + 1] == vec[i]){
         temp++;
      }
      else{
         temp = 1;
      }
      maximum = max(maximum, temp);
   }
   return maximum;
}
int main(){
   int arr[] = { 5, 8, 1, 2, 9, 12};
   int size = sizeof(arr) / sizeof(arr[0]);
   cout<<"Maximum number of contiguous array elements with same number of set bits are:
   "<<maximum_SameBits(arr, size);
   return 0;
}

Output

Maximum number of contiguous array elements with same number of set bits are: 3

Updated on: 03-Aug-2020

90 Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements