腾讯面试:比特位计数
题目描述
给定一个非负整数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/
腾讯面试:比特位计数相关推荐
- 《LeetCode力扣练习》第338题 比特位计数 Java
<LeetCode力扣练习>第338题 比特位计数 Java 一.资源 题目: 给你一个整数 n ,对于 0 <= i <= n 中的每个 i ,计算其二进制表示中 1 的个数 ...
- LeetCode每日一题:比特位计数(No.338)
题目:比特位计数 给定一个非负整数 num.对于 0 ≤ i ≤ num 范围中的每个数字 i ,计算其二进制数中的 1 的数目并将它们作为数组返回. 复制代码 示例: 输入: 2 输出: [0,1, ...
- Leetcode338. 比特位计数
Leetcode338. 比特位计数 题目: 给你一个整数 n ,对于 0 <= i <= n 中的每个 i ,计算其二进制表示中 1 的个数 ,返回一个长度为 n + 1 的数组 ans ...
- 比特位计数--C++ bitset 用法
比特位计数 前言 一.示例 二.代码解析 1.比特位计数 2.测试代码 3.结果 三.C++ bitset 用法 1.构造函数 2.一些函数 3.结果 总结 前言 给定一个非负整数 num.对于 0 ...
- (LeetCode C++)比特位计数
给你一个整数 n ,对于 0 <= i <= n 中的每个 i ,计算其二进制表示中 1 的个数 ,返回一个长度为 n + 1 的数组 ans 作为答案. 示例 1: 输入:n = 2 输 ...
- leetcode--338. 比特位计数
给定一个非负整数 num.对于 0 ≤ i ≤ num 范围中的每个数字 i ,计算其二进制数中的 1 的数目并将它们作为数组返回. 示例 1: 输入: 2 输出: [0,1,1] 示例 2: 输入: ...
- leetcode 338. 比特位计数
给定一个非负整数 num.对于 0 ≤ i ≤ num 范围中的每个数字 i ,计算其二进制数中的 1 的数目并将它们作为数组返回. 示例 1: 输入: 2 输出: [0,1,1] 示例 2: 输入: ...
- 【LeetCode笔记】338. 比特位计数(Java、位运算、动态规划)
文章目录 题目描述 思路 & 代码 无注释二刷 题目描述 难点在于 O(n) 思路 & 代码 理解题意,分析出 O(n) 复杂度应该是要用到之前的值来得到当前值--动态规划 核心结论: ...
- leetcode 338 比特位计数
如果一个数i%2=1,即为奇数,即二进制中的最低位为1.我们将这个过程循环直至i为0,每一次i%2=1我们将该数的'1'数加一. 上面的方法不能做到复杂度O(n)完成所有数的的遍历.我们换成动态规划. ...
最新文章
- my understanding for love
- 判断页面在手机和pc打开的方法
- linux函数地址获取函数名,函数名/函数地址/函数指针
- ajax ssm 页面跳转_SSM框架的面试常见问题
- 百度编辑器UEditor源码模式下过滤div/style等html标签
- Elegant Gnome Pack - 桌面环境
- [转载]遗传算法介绍
- android判断某文件下是否you_Android_判断文件是否存在并创建代码
- 光敏电阻、光电二三极管及接收头
- 51 单片机 程序编写
- java 调用 fastreport,Winform中使用FastReport实现简单的自定义PDF导出
- 瑞星4月2日安全综述:网页挂马攻击严重
- 如何留住企业中层领导
- CSP-J2022入门组二轮补赛试题(山东)T2:宴会
- win7 设定固定的ip地址
- 大数据与人工智能实验室【2022-05-08】
- OpenCV视频目标跟踪及背景分割器
- Pentaho Data Integration初步安装
- 有一个8位机,采用单总线结构......(计算机组成原理课后习题)
- Apple Mac放大招——搭载M1 Ultra,性能完胜RTX 3090,功耗降低200W
热门文章
- 【Android 高性能音频】Oboe 开发流程 ( Oboe 完整代码示例 )
- 【Netty】零拷贝案例 ( transferTo | transferFrom )
- 八大排序算法的python实现(四)快速排序
- 架构之美读书笔记03
- android 原色调渲染
- 第五节 suid/ sgid /sbit /which /locate / find /stat / ln / uname -a
- 《C++ Primer Plus 6th》读书笔记 - 第8章 函数探幽
- django 组件架构图
- CSDN如何快速转载别人的博客(附简单详细方法)
- 当前主流、最新技术回眸(四)