比特位计数(给定一个非负整数 num。对于 0 ≤ i ≤ num 范围中的每个数字 i ,计算其二进制数中的 1 的数目并将它们作为数组返回。)
2019-03-27 19:30
796 查看
给定一个非负整数 num。对于 0 ≤ i ≤ num 范围中的每个数字 i ,计算其二进制数中的 1 的数目并将它们作为数组返回。
示例 1:
输入: 2
输出: [0,1,1]
示例 2:
输入: 5
输出: [0,1,1,2,1,2]
思想方法:i & (i-1) 是把i最右边的1去掉,即 i中1的个数为 i&(i-1)中1 的个数加1, a[i]对应着i中含有1的个数,所以a[i]中1的个数 为a[i&(i+1)]的个数加1
[code]public class lianxi0327 { public static void main(String[] args) { Solution S = new Solution(); int num = 10; int[] a = S.countBits(num); for(int i : a) { System.out.print(i+" "); } } } class Solution { public int[] countBits(int num) { int[] a = new int[num+1]; a[0] = 0; int i = 1; while(i <= num){ //i & (i-1) 是吧i最右边的1去掉,即 i中1的个数为 i&(i-1)中1 得个数加1 // a[i]对应着i中含有1的个数,所以a[i]中1的个数 为a[i&(i+1)]的个数加1 a[i] = a[i & ( i - 1)] + 1; i++; } return a; } }
相关文章推荐
- 给定一个整数数组,两个数字的返回索引将它们加到一个特定的目标中。 您可以假设每个输入都只有一个解决方案,并且您可能不会两次使用相同的元素。
- 给出两个表示两个非负整数的非空链表。数字以相反的顺序存储,它们的每个节点都包含一个数字。添加两个数字,并将其作为链接列表返回。
- 有一个直方图,用一个整数数组表示,其中每列的宽度为1,求所给直方图包含的最大矩形面积。比如,对于直方图[2,7,9,4],它所包含的最大矩形的面积为14(即[7,9]包涵的7x2的矩形)。给定一个直方图A及它的总宽度n,请返回最大矩形面积。保证直方图宽度小于等于500。保证结果在int范围内。
- 给定一个整数数组,返回两个数字的索引,使它们相加得到一个特定目标值
- 面试题:给定一个长度为N的数组,其中每个元素的取值范围都是1到N。判断数组中是否有重复的数字
- 给定一个长度为N的数组,其中每个元素的取值范围都是1到N。判断数组中是否有重复的数字。(原数组不必保留)
- 给定整数数组,返回一个新数组,使得新数组的索引i中的每个元素都是原始数组中除i中的所有数字的乘积。Python实现。
- 给定一个排序数组,删除重复的位置,使每个元素只出现一次,并返回新的长度。
- 给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。
- 大数乘法。给定两个数字表示为字符串,返回乘数的数字作为一个字符串。
- 给定一个正整数n,找到小于或等于n的非负整数,其二进制表示不包含连续的整数。
- 一个长度为N的整形数组,数组中每个元素的取值范围是[0,N-1],写一个算法判断数组中是否存在重复的数字
- java__给定一个非负整数数组,假定你的初始位置为数组第一个下标。 数组中的每个元素代表你在那个位置能够跳跃的最大长度。 请确认你是否能够跳跃到数组的最后一个下标。
- 在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{
- 给定一个非负整数,你可以最多交换两个数字一次来获得最大值的数字。 返回您可以获得的最大值。
- 对于一个有序数组,我们通常采用二分查找的方式来定位某一元素,请编写二分查找的算法,在数组中查找指定元素。 给定一个整数数组A及它的大小n,同时给定要查找的元素val,请返回它在数组中的位置(从0开始),若不存在该元素,返回-1。若该元素出现多次,请返回第一次出现的位置。
- 给定一个没有重复的已排序整数数组,返回其范围的摘要。
- 在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是重复的数字2或者3
- 在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{
- 一个能将给定非负整数数组中的数字排列成最大数字的函数(数组元素长度随机)