题目描述

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

示例 1:

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

示例 2:

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

方法一:Pop count

public class Solution {public int[] countBits(int num) {int[] ans = new int[num + 1];for (int i = 0; i <= num; ++i)ans[i] = popcount(i);return ans;}private int popcount(int x) {int count;for (count = 0; x != 0; ++count)x &= x - 1; //zeroing out the least significant nonzero bitreturn count;}
}

x &= x - 1  会将x用二进制表示时最右边的一个1变为0,然后并赋值

方法二:动态规划 + 最高有效位

public class Solution {public int[] countBits(int num) {int[] ans = new int[num + 1];int i = 0, b = 1;// [0, b) is calculatedwhile (b <= num) {// generate [b, 2b) or [b, num) from [0, b)while(i < b && i + b <= num){ans[i + b] = ans[i] + 1;++i;}i = 0;   // reset ib <<= 1; // b = 2b}return ans;}
}

动态规划 + 最低有效位

public class Solution {public int[] countBits(int num) {int[] ans = new int[num + 1];for (int i = 1; i <= num; ++i)ans[i] = ans[i >> 1] + (i & 1); // x / 2 is x >> 1 and x % 2 is x & 1return ans;}
}

观察规律,最低有效位相当于除以了2

动态规划 + 最后设置位

public class Solution {public int[] countBits(int num) {int[] ans = new int[num + 1];for (int i = 1; i <= num; ++i)ans[i] = ans[i & (i - 1)] + 1;return ans;}
}

参考地址:https://leetcode-cn.com/problems/counting-bits/solution/bi-te-wei-ji-shu-by-leetcode/

腾讯面试:比特位计数相关推荐

  1. 《LeetCode力扣练习》第338题 比特位计数 Java

    <LeetCode力扣练习>第338题 比特位计数 Java 一.资源 题目: 给你一个整数 n ,对于 0 <= i <= n 中的每个 i ,计算其二进制表示中 1 的个数 ...

  2. LeetCode每日一题:比特位计数(No.338)

    题目:比特位计数 给定一个非负整数 num.对于 0 ≤ i ≤ num 范围中的每个数字 i ,计算其二进制数中的 1 的数目并将它们作为数组返回. 复制代码 示例: 输入: 2 输出: [0,1, ...

  3. Leetcode338. 比特位计数

    Leetcode338. 比特位计数 题目: 给你一个整数 n ,对于 0 <= i <= n 中的每个 i ,计算其二进制表示中 1 的个数 ,返回一个长度为 n + 1 的数组 ans ...

  4. 比特位计数--C++ bitset 用法

    比特位计数 前言 一.示例 二.代码解析 1.比特位计数 2.测试代码 3.结果 三.C++ bitset 用法 1.构造函数 2.一些函数 3.结果 总结 前言 给定一个非负整数 num.对于 0 ...

  5. (LeetCode C++)比特位计数

    给你一个整数 n ,对于 0 <= i <= n 中的每个 i ,计算其二进制表示中 1 的个数 ,返回一个长度为 n + 1 的数组 ans 作为答案. 示例 1: 输入:n = 2 输 ...

  6. leetcode--338. 比特位计数

    给定一个非负整数 num.对于 0 ≤ i ≤ num 范围中的每个数字 i ,计算其二进制数中的 1 的数目并将它们作为数组返回. 示例 1: 输入: 2 输出: [0,1,1] 示例 2: 输入: ...

  7. leetcode 338. 比特位计数

    给定一个非负整数 num.对于 0 ≤ i ≤ num 范围中的每个数字 i ,计算其二进制数中的 1 的数目并将它们作为数组返回. 示例 1: 输入: 2 输出: [0,1,1] 示例 2: 输入: ...

  8. 【LeetCode笔记】338. 比特位计数(Java、位运算、动态规划)

    文章目录 题目描述 思路 & 代码 无注释二刷 题目描述 难点在于 O(n) 思路 & 代码 理解题意,分析出 O(n) 复杂度应该是要用到之前的值来得到当前值--动态规划 核心结论: ...

  9. leetcode 338 比特位计数

    如果一个数i%2=1,即为奇数,即二进制中的最低位为1.我们将这个过程循环直至i为0,每一次i%2=1我们将该数的'1'数加一. 上面的方法不能做到复杂度O(n)完成所有数的的遍历.我们换成动态规划. ...

最新文章

  1. my understanding for love
  2. 判断页面在手机和pc打开的方法
  3. linux函数地址获取函数名,函数名/函数地址/函数指针
  4. ajax ssm 页面跳转_SSM框架的面试常见问题
  5. 百度编辑器UEditor源码模式下过滤div/style等html标签
  6. Elegant Gnome Pack - 桌面环境
  7. [转载]遗传算法介绍
  8. android判断某文件下是否you_Android_判断文件是否存在并创建代码
  9. 光敏电阻、光电二三极管及接收头
  10. 51 单片机 程序编写
  11. java 调用 fastreport,Winform中使用FastReport实现简单的自定义PDF导出
  12. 瑞星4月2日安全综述:网页挂马攻击严重
  13. 如何留住企业中层领导
  14. CSP-J2022入门组二轮补赛试题(山东)T2:宴会
  15. win7 设定固定的ip地址
  16. 大数据与人工智能实验室【2022-05-08】
  17. OpenCV视频目标跟踪及背景分割器
  18. Pentaho Data Integration初步安装
  19. 有一个8位机,采用单总线结构......(计算机组成原理课后习题)
  20. Apple Mac放大招——搭载M1 Ultra,性能完胜RTX 3090,功耗降低200W

热门文章

  1. 【Android 高性能音频】Oboe 开发流程 ( Oboe 完整代码示例 )
  2. 【Netty】零拷贝案例 ( transferTo | transferFrom )
  3. 八大排序算法的python实现(四)快速排序
  4. 架构之美读书笔记03
  5. android 原色调渲染
  6. 第五节 suid/ sgid /sbit /which /locate / find /stat / ln / uname -a
  7. 《C++ Primer Plus 6th》读书笔记 - 第8章 函数探幽
  8. django 组件架构图
  9. CSDN如何快速转载别人的博客(附简单详细方法)
  10. 当前主流、最新技术回眸(四)