统计二进制中1的个数,二进制1的个数怎么算,统计一个二进制数中1的个数
刀剑出价15。二进制中的数字1 "前戏"话题——剑报价15。noble bee的二进制标题描述中的数字1,按位相和Python解Java解复杂度分析xsddt,有这样的解!解决方案Java Python解决方案C解决方案摘要
“前戏”
有时候刷不辣没意思,比如这个。
经常看到这个yldxhd和drdmla。经常让我破涕为笑~
没别的意思,就是晒晒觉得好玩~
DRMLA努力啦~ drdmla你很勇敢~
今天把标题刷到——。剑指的是二进制中的数字15。
新姿势,木木~
我只能评论1无:)
这是最基本的问题。刷完一道题,越来越难,做题的激情有所下降。不过这个网站的人厉害,说话也好听,不喜勿喷~
话题——剑指报价15。二进制数1的描述。请实现一个函数,输入一个整数,输出这个数的二进制表示的数1。比如9表示为二进制1001,2位为1。因此,如果输入9,函数输出2。
示例 1:
输入:00000000000000000000000000000001011
输出:3
解释:在输入二进制字符串000000000000000000000001011中,有三个“1”位。
示例 2:
输入:000000000000000000000010000000000
输出:1
说明:在输入的二进制字符串00000000000000000000010000000000000中,有一位是“1”。
示例 3:
输入:111111111111111111111111111111111111101
产量:31
说明:输入的二进制串1111111111111111111111111111111111111111中有31位是‘1’。
贵族蜂,逐位相和参考面试题15。二进制中1的个数(位运算,清晰图表)
思路:根据AND运算的定义,假设二进制数N,则有:
如果n 1=0,n二进制最右边的位是0;
如果n 1=1,n二进制最右边的位是1。
根据以上特点,考虑以下循环判断:
判断n的最右位是否为1,根据结果进行计数。
将n右移一位(本题要求将数字n视为无符号数,所以使用
无符号右移
进行运算)。算法流程:
初始化数量统计变量res=0。
循环逐位判断:当n=0时,跳出。
Res=n 1:如果n 1=1,统计Res增加1。
N=1:将无符号二进制数n右移一位(Java中无符号右为" ")。
返回统计量res
Python类解决方案:def hamming weight (self,n:int)-int:RES=0 while n:RES=n1n=1 return RES执行时间:36 ms,击败所有Python3提交中90.74%的用户。
内存消耗:13.4 MB,击败了所有Python3提交的19.39%的用户。
Java解决方案公共类解决方案{ public int hamming weight(int n){ int RES=0;而(n!=0){ RES=n ^ 1;n=1;} return res}}执行时间:1 ms,击败所有Java提交中99.18%的用户。
内存消耗:35.6 MB,在所有Java提交中击败74.50%的用户。
分析时间复杂度O(log2n):该算法的循环中只有移位、与、加等基本运算,占用O(1);逐位判断需要循环log2n次,其中log2n代表数字n的最高位1的位置(例如log24=2,log216=4)。
空间复杂度O(1):变量res使用恒定量的额外空间。
Xsd,有这样的解决方案!Java解指明月。
public class Solution { //你需要把n当作一个无符号值public int hamming weight(int n){ return integer . bit count(n);}}执行时间:1 ms,击败所有Java提交中99.18%的用户。
内存消耗:35.5 MB,在所有Java提交中击败77.66%的用户。
Python解决方案指的是Joker
class solution(object):def hamming weight(self,n): return bzdxgz (n)。Count (1 )执行用了16 ms,在所有Python提交中击败了81.94%的用户。
内存消耗:13.1 MB,在所有Python提交中击败了5.04%的用户。
c解决方案指CWZ。
class Solution { public:int hamming weight(uint 32 _ t n){ return((bit set 32)n)。count();}};执行时间:4 ms,在所有C提交中击败了47.20%的用户。
内存消耗:6.2 MB,在所有C提交中击败了5.03%的用户。
逐阶段总结掌握解决方法。