【LeetCode75】第六十七题 比特位计数

目录

题目:

示例:

分析:

代码:


题目:

示例:

分析:

题目给我们一个整数n,要我们返回一个长度为n+1的数组,数组的第 i 位元素是 整数 i 的二进制数拥有的1的数目。例如 10 的二进制是 1010,所以10拥有的1的数目是2。

那么我们直接从0遍历到n+1,再单独算出这个数拥有的1的数目就可以了。

第一种方法就是C++有内置一个函数,直接统计你这个数的二进制有多少个1,直接使用这个函数就可以得出来:

cpp 复制代码
__builtin_popcount(i)

第二种方法就是我们直接手算。我们可以从一个数的二进制的右边第一位开始统计1的数目。如果一个数余2等于1,那么它的右边第一位就是1。

所以我们可以反复对这个数余2再除2,直到这个数变成了0,那么我们也就统计出了1的数目。

代码:

cpp 复制代码
class Solution {
public:
    //手动计算每个数的二进制有多少1
    vector<int> countBits(int n) {
        vector<int>res(n+1,0);
        int temp=0;
        for(int i=0;i<=n;i++){
            temp=i;
            while(temp){
                //可以写成 res[i]+=temp&0x1;temp>>=1;
                res[i]+=temp%2;
                temp/=2;
            }
        }
        return res;
    }
    
    //使用内置函数 
    vector<int> countBits(int n) {
        vector<int>res(n+1,0);
        for(int i=0;i<=n;i++){
            res[i]=__builtin_popcount(i);
        }
        return res;
    }
};
相关推荐
飞天狗1113 分钟前
最短路算法
算法
汉克老师15 分钟前
GESPC++考试五级语法知识(二、埃氏筛与线性筛)课后习题
算法·线性筛·素数·gesp5级·gesp五级·埃氏筛·筛法
xsyaaaan16 分钟前
leetcode-hot100-普通数组:53最大子数组和-56合并区间-189轮转数组-238除了自身以外数组的乘积-41缺失的第一个正数
leetcode
Qt学视觉17 分钟前
AI3-PaddleOCR搭建环境1
c++·人工智能·opencv·ocr·paddlepaddle
0 0 018 分钟前
洛谷P4427 [BJOI2018] 求和 【考点】:树上前缀和
开发语言·c++·算法·前缀和
Darkwanderor25 分钟前
数据结构——树状数组和在线、离线操作
数据结构·c++·树状数组·离线操作
佩奇大王26 分钟前
P593 既约分数
java·开发语言·算法
云泽80830 分钟前
蓝桥杯算法精讲:贪心算法之推公式例题深度剖析
算法·贪心算法·蓝桥杯
客卿1231 小时前
力扣--组合,子集--回溯法的再探索--总结回溯法
java·算法·leetcode
小温冲冲1 小时前
如何在Visual Studio中创建QML工程
c++·qt·visual studio