要求:
写一个函数,以一个无符号整数为参数,返回其汉明权重。例如,‘11’的二进制表示为'00000000000000000000000000001011', 故函数应当返回3。
汉明权重:指一个字符串中非零字符的个数;对于二进制串,即其中‘1’的个数。
难度:简单
分析:
将十进制参数转换为二进制,然后计算其中1的个数即可。
“除二取余”是常见的计算方式,由于Java中没有无符号整型,故采用无符号移位代替数学运算。这也避免了传入参数为Integer.MAX_VALUE + 1,即2147483648 (10000000000000000000000000000000)时会导致的潜在错误
解决方案:
Java - 217ms
public int hammingWeight(int n) { int sum = 0; while(n != 0) { sum += n & 1; n = n >>> 1; } return sum; }
Python - 48ms
def hammingWeight(self, n): sum = 0 while(n != 0): sum += n & 1 n = n >> 1 return sum
相关推荐
面试题 02.06. 回文链表标签:栈、递归、链表、双指针难度:简单题目大意给定一个链表的头节点 head。然后再使用两个指针,一个指向数组开始位置,一个指向数
解题思路如果 n ,则 n 必然不是丑数,直接返回 False。对 n 分别进行 2、3、5 的整除操作,直到 n 被除完,如果 n 最终为 1,则 n
要求:对于 0 ≤ i ≤ n 的每一个 i,计算其二进制表示中 1 的个数,返回一个长度为 n + 1 的数组 ans 作为答案。解题思路可以根据整数的二进制
0148. 排序链表标签:链表、双指针、分治、排序、归并排序难度:中等题目大意给定链表的头节点 head。将排序后的子链表进行归并排序,得到完整的排序后的链表。
0169. 多数元素标签:数组、哈希表难度:简单题目大意给定一个数组,找到其中相同元素个数最多的元素。遍历一遍数组 nums,用哈希表统计每个元素 num 出现
0038. 外观数列标签:字符串难度:简单题目大意给定一个正整数 n,$(1 \le n \le 30)$,要求输出外观数列的第 n 项。将 ans 设为 "1
计算出在 n 的范围内,3 的幂次方最大为 $3^{19} = 1162261467$。3 为质数,则 $3^{19}$ 的除数只有 $3^0, 3^1, …所
0946. 验证栈序列标签:栈、数组、模拟难度:中等题目大意给定两个整数序列 pushed 和 popped,每个序列中的值都不重复。要求:如果第一个序列为空栈
0704. 二分查找标签:二分查找难度:简单题目大意给定一个升序的数组 nums,和一个目标值 target,返回 target 在数组中的位置,如果找不到,则
如果顾客支付 10 美元,如果我们手头有 5 美元面额的钞票,则找给顾客,否则无法正确找零,返回 False。如果顾客支付 20 美元,如果我们手头有 1 张
0404. 左叶子之和标签:树难度:简单题目大意给定一个二叉树,计算所有左叶子之和。解题思路深度优先搜索递归遍历二叉树,若当前节点不为空,且左孩子节点不为空,且
旋转操作指的是:升序排列的数组 nums 在预先未知的第 k 个位置进行了右移操作,变成了 [nums[k]], nums[k+1], ... , nums[n
0485. 最大连续 1 的个数标签:数组难度:简单题目大意给定一个二进制数组,数组中只包含 0 和 1,计算其中最大连续 1 的个数。sum 用于存储当前连续
逆波兰表达式,也叫做后缀表达式,特点是:没有括号,运算符总是放在和它相关的操作数之后。我们在计算逆波兰表达式的值时,可以使用一个栈来存放当前的操作数,从左到右依
2. 位运算将出现三次的元素换成二进制形式放在一起,其二进制对应位置上,出现 1 的个数一定是 3 的倍数(包括 0)。此时,如果在放进来只出现一次的元素,则某
解题思路最大元素满足大于等于L 小于等于R的子数组个数 = 最大元素小于等于 R 的子数组个数 - 最大元素小于 L 的子数组个数。我们使用 count 记录
不断右移 right 指针,扩大滑动窗口范围,并统计窗口内 0 元素的个数,直到 0 元素的个数超过 k 时将 left 右移,缩小滑动窗口范围,并减小 0 元
0095. 不同的二叉搜索树 II标签:树、二叉搜索树、动态规划、回溯、二叉树难度:中等题目大意给定一个整数 n,请返回以 1 到 n 为节点构成的「二叉搜索树
解题思路序列化:通过深度优先搜索的方式,递归遍历节点,以 root.val、len(root.children)、root.children 的顺序生成序列化结
2. 位运算将出现三次的元素换成二进制形式放在一起,其二进制对应位置上,出现 1 的个数一定是 3 的倍数(包括 0)。此时,如果在放进来只出现一次的元素,则某