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的最大变量。
创建一个vector类型的变量vec
从0到数组大小开始循环
使用“__builtin_popcount(element)”函数计算数组元素的二进制设置位数,该函数将返回给定元素的总设置位数,并将计数存储到向量中。
从1到向量的size开始循环
在向量中,如果vec[i+1] = vec[i],则将temp的值加1
否则,将temp设置为1
使用max函数选择temp和maximum之间的最大值来设置maximum。
返回最大变量
打印结果。
示例
#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;
}输出
Maximum number of contiguous array elements with same number of set bits are: 3
广告
数据结构
网络
关系数据库管理系统 (RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C编程
C++
C#
MongoDB
MySQL
Javascript
PHP