C ++中具有相同置位位数的最大连续数组元素数

我们得到了一个未排序的整数元素数组,任务是计算两个主要内容,即

  • 设置位数相同的元素

  • 同样,具有相同设置位的元素本质上应该是连续的。

输入值

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

输出-设置位数相同的连续数组元素的最大数量为-3

解释-我们将计算数组元素的二进制数字并计算其设置位。

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

因此,具有相同的置位位数并且本质上也是连续的元素为5、9和12。因此具有相同的置位位数的连续数组元素的最大数目为3

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

输出-具有相同设置位数的连续数组元素的最大数量为-2

解释-我们将计算数组元素的二进制数字并计算其设置位。

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

因此,具有相同置位位数并且本质上也是连续的元素为1和2。因此具有相同置位位数的连续数组元素的最大数目为2

以下程序中使用的方法如下

  • 输入整数类型的数组元素

  • 使用size函数计算数组的大小并将其传递给该函数

  • 取一个临时变量并将其设置为值1,还将最大变量设置为值1。

  • 创建矢量类型的变量vec

  • 从0开始循环直到数组大小

  • 使用“ __builtin_popcount(element)”函数计算数组元素的二进制设置位,该函数将返回传递给它的给定元素的设置位总数,并继续将计数存储到向量中。

  • 从1到向量大小的开始循环

  • 在向量内,检查vec [i + 1] = vec [i],然后将temp的值增加1

  • 否则,将温度设置为1

  • 通过使用最大值功能在温度和最大值之间选择最大值来设置最大值。

  • 返回最大变量

  • 打印结果。

示例

#include <bits/stdc++.h>
using namespace std;
//函数计算最大相同位数
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;
}

输出结果

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