338. 比特位计数

简介: 给定一个非负整数 num。对于 0 ≤ i ≤ num 范围中的每个数字 i ,计算其二进制数中的 1 的数目并将它们作为数组返回。

一、题目描述:


给定一个非负整数 num。对于 0 ≤ i ≤ num 范围中的每个数字 i ,计算其二进制数中的 1 的数目并将它们作为数组返回。


示例 1:

输入:2

输出:[0,1,1]

示例 2:

输入:5

输出:[0,1,1,2,1,2]


二、思路分析:


思路一:

先考虑将一个数转成二进制数,可以使用m % 2来计算。再考虑将这个数中包含出现1的次数记录下来。完成一个数记录1次数后,再使用一个循环从0开始到输入的数,在循环中记录每个数值出现的次数。

网络异常,图片无法展示
|


思路二:

emmm,想不出来其他方法。看了官网的没看明白。


三、AC 代码:


方法一:

function countBits(num: number): number[] {
  let arr = [];
  let j;
  for (let i = 0; i <= num; i++) {
    j = 0;
    let m = i;
    while (m > 0) { // 一个数记录1出现的次数
      if (m % 2 === 1) j++;
      m = Math.floor(m / 2);
    }
    arr.push(j);
  }
  return arr;
}

方法二:

function countBits(num: number): number[] {
  let bits = new Array(num + 1).fill(0);
  let highBit = 1;
  for (let i = 1; i <= num; i++) {
    if (highBit * 2 === i) highBit = i;
    bits[i] = bits[i - highBit] + 1;
  }
  return bits;
}


四、总结:


此题主要考察二进制统计。


题目来源:leetcode。


作者:ClyingDeng

链接:https://juejin.cn/post/6935320936451145736

来源:稀土掘金

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

目录
相关文章
|
6月前
|
算法 前端开发
3005. 最大频率元素计数
3005. 最大频率元素计数
47 0
|
3月前
|
存储 算法 程序员
极限挑战:40亿个非负整数中找到没有出现的数(bit数组)
大家好!我是小米,一名热衷于技术分享的29岁程序员。今天探讨的问题是在40亿个非负整数中找到未出现的数字。直接使用哈希表因内存限制而不可行。本文提出了一种解决方案——利用bit数组。通过标记出现过的数字,最终找出未被标记的位置所对应的数字即为答案。对于更严格的内存限制(如10MB),文章还介绍了分块处理的方法,先统计每个区间的数字数量,找到计数不足的区间后再精确处理。这种算法不仅展示了巧妙利用有限资源的能力,也为实际工程问题提供了解决思路。希望各位读者能从中受益,享受编程带来的乐趣!
64 15
|
6月前
|
C++
比特位计数(C++)
比特位计数(C++)
57 0
|
6月前
leetcode-338:比特位计数
leetcode-338:比特位计数
35 0
|
6月前
leetcode-717:1比特与2比特字符
leetcode-717:1比特与2比特字符
39 0
|
编解码 算法 Serverless
m通过概率整形技术对1024QAM进行星座图整形,并输出GMI指标
m通过概率整形技术对1024QAM进行星座图整形,并输出GMI指标
316 0
|
传感器 芯片
模拟量与数字量区别
模拟量与数字量区别
196 0
|
C语言
宏定义设置x二进制序列的第n个比特位为1或者0
宏定义设置x二进制序列的第n个比特位为1或者0
136 0
|
算法 芯片
通过概率整形技术对64QAM进行星座图整形,并输出GMI指标
通过概率整形技术对64QAM进行星座图整形,并输出GMI指标
425 0
通过概率整形技术对64QAM进行星座图整形,并输出GMI指标
|
存储 程序员
5.1.1_进位计数制
计算机组成原理之进位计数制
250 0