【力扣】:比特位计数

1.去掉二进制中最左边的1,n&(n-1),如果一次操作以后,就是0,那么这个数是2的倍数。进行几次操作,,变为0,那么就有几个1.

2.拿到最左边的1,n&-n

3.将x位改为0,~(1<<x)&n

4,x位改为1,1<<x|n.

解法一:

复制代码
class Solution {
public:
    vector<int> countBits(int n) {
        vector<int> bits(n + 1);
        for (int i = 0; i <= n; i++) {
                int ones = 0;
                while (x > 0) {
                x &= (x - 1);
                ones++;
            }
            bits[i]=ones;
        }
        return bits;
    }
};

解法2:

动态规划

复制代码
class Solution {
    public int[] countBits(int n) {
        int[] bits = new int[n + 1];
        int highBit = 0;
        for (int i = 1; i <= n; i++) {
            if ((i & (i - 1)) == 0) {
                highBit = i;
            }
            bits[i] = bits[i - highBit] + 1;
        }
        return bits;
    }
}
相关推荐
亲爱的非洲野猪16 分钟前
令牌桶(Token Bucket)和漏桶(Leaky Bucket)细节对比
网络·算法·限流·服务
NAGNIP31 分钟前
一文读懂LLAMA
算法
烧冻鸡翅QAQ33 分钟前
62.不同路径
算法·动态规划
番薯大佬33 分钟前
编程算法实例-冒泡排序
数据结构·算法·排序算法
queenlll35 分钟前
P2404 自然数的拆分问题(典型的dfs)
算法·深度优先
wydaicls36 分钟前
用函数实现方程函数解题
人工智能·算法·机器学习
·白小白37 分钟前
力扣(LeetCode) ——100. 相同的树(C语言)
c语言·算法·leetcode
CoovallyAIHub1 小时前
为什么85%的企业AI项目都失败了?
深度学习·算法·计算机视觉
KarrySmile1 小时前
Day8--滑动窗口与双指针--1004. 最大连续1的个数 III,1658. 将 x 减到 0 的最小操作数,3641. 最长半重复子数组
数据结构·算法·双指针·滑动窗口·不定长滑动窗口·最大连续1的个数·最长子数组
zc.ovo1 小时前
图论水题4
c++·算法·图论