LeetCode-338-比特位计数

思路
i >> 1会把最低位去掉,因此i >> 1 也是比i小的,同样也是在前面的数组里算过。当 i 的最低位是0,则 i 中1的个数和i >> 1中1的个数相同;当i的最低位是1,i 中1的个数是 i >> 1中1的个数再加1
代码
public int[] countBits(int num) {
int []cnt=new int[num+1];
cnt[0]=0;
for(int i=1;i<=num;i++){
cnt[i]=cnt[i>>1]+(i&1);
}
return cnt;
}
这篇文章介绍了如何使用线性时间复杂度解决LeetCode题目338,通过位操作技巧,利用i右移1和与1操作,高效地计算整数的比特位计数。通过递推公式cnt[i] = cnt[i>>1] + (i&1),代码实现简洁且性能优越。
304

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



