代码实现:
#include <iostream>
#include <algorithm>
using namespace std;
/*
统计比特数描述:
一个整数值列表中查找值含比特1位数最多的整数值,如果有多个含比特1位数相同的整数值,那么返回值最小的那一个整数值.
参数:
items
count
value
返回值:
>0
0
-1
整数值列表整数值个数返回最多含比特1位数的最小整数值
统计成功并返回最多含比特1位数无含比特1的整数值参数不合法
*/
int StatMaxBit(const int *items, int count, int *value)
{
unsigned int copy[count] = {0};
for (int i = 0; i < count; i++)
{
copy[i] = items[i];
}
int result;
int StatNum[count] = {0}; // bit位数目统计
int max = 0;
int k = 0;
if (!items || count < 0 || !value)
{
result = -1;
}
else
{
unsigned int *star = copy;
unsigned int *end1 = copy + count;
// 数字bit位统计模块
for (; star < end1; star++)
{
int oneBitnum = 0;
unsigned int temp = *star;
while (temp > 0)
{
temp &= (temp - 1);
oneBitnum++;
}
StatNum[star - copy] = oneBitnum; // 统计对应ITEMS列表对应的1bit位的数目
}
int *max = StatNum;
int *end2 = max + count;
int *pos = max + 1;
// 寻找最大值并返回第一个出现最大值的位置
for (; pos < end2; pos++)
{
if (*max < *pos)
{
max = pos;
}
}
*value = copy[max - StatNum];
result = *max;
}
return result;
}
int main()
{
int count;
int x = 0;
int *value = &x;
int num;
cout << "请输入数组大小:";
scanf("%d", &count);
int items[count];
// 请输入数组元素
cout << "请输入元素值:" << endl;
for (int i = 0; i < count; i++)
{
/* */
cin >> items[i];
}
sort(items, items + count); // 有序数组
num = StatMaxBit(items, count, value);
cout << "返回: " << num << ", *value: " << *value << endl;
system("pause");
return 0;
}
代码思想:
首先创建一个数组,在数组进入函数前利用sort函数进行排序,使其在进入函数前是有序的,然后j进入数组时将其的值拷贝给一个无符号整型数组。初始化完成
其次利用num=&(num-1)进行bit为1的计数。存储到计数数组中。
然后利用寻找最大值模块返回最大值。
该博客介绍了一种C++实现的算法,用于在整数值列表中查找比特1位数最多的整数。如果存在多个相同比特1位数的数,算法会选择值最小的那个。首先对列表排序,然后通过位操作计算每个数的1位数并存储,最后找到具有最多1位的最小数值。

被折叠的 条评论
为什么被折叠?



