每日一题—统计比特数描述 一个整数值列表中查找值含比特1位数最多的整数值,如果有多个含比特1位数相同的整数值,那么返回值最小的那一个整数值.

该博客介绍了一种C++实现的算法,用于在整数值列表中查找比特1位数最多的整数。如果存在多个相同比特1位数的数,算法会选择值最小的那个。首先对列表排序,然后通过位操作计算每个数的1位数并存储,最后找到具有最多1位的最小数值。

代码实现:

#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的计数。存储到计数数组中。

然后利用寻找最大值模块返回最大值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值