zoukankan      html  css  js  c++  java
  • 二进制 中 1 的 个数

    题目来源:

     https://www.nowcoder.com/practice/8ee967e43c2c4ec193b040ea7fbb10b8?tpId=13&tqId=11164&tPage=1&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking

     
    分析:

     计算二进制中1的个数,以前在LeetCode上面好像遇到过这个题目,记得当是也是对答案拍案叫绝,这次尽然没有想起来

    自己的代码:
    class Solution:
        def NumberOf1(self, n):
            # write code here
            count=0
            if n<0:
                n=n&0xffffffff
            while n!=0:
                count+=1
                n= n&(n-1)
            return count
    代码效率/结果:
     
    优秀代码:
    代码效率/结果:
     
    自己优化后的代码:
     
    反思改进策略:

     1.怎么统计1的个数?

    利用小技巧x&(x-1)可以将整数最右边的1变成0,通过这个小技巧,我们只要循环判断n=n&(n-1)是否为0,即可统计1的个数。

    2.关于计算机中补码的操作

    9的源码为0000  1001

    如果是负数的话,补码为最高位置1 ,

    其余取反也就是1111  0110,然后在最低位加1即可即1111  0111

    在python里面也是这样存储的,这里有一个问题:如果负数的话,不处理,那么n-1这个操作,会使得10000,下一次全部变成11111,因为符号位是不会右移变成0的,会不断补充1进去

    这里使用一个方法,n & 0xffffffff,这样可以使带符号数变成无符号数,这样就可以顺利的通过-1操作来计数里面1的个数

    简单一句话:就是把补码变成无符号数

    具体解释:http://www.cnblogs.com/lazycoding/archive/2011/03/21/unsigned-signed.html

    写题时间时长:

    1hou

  • 相关阅读:
    Java 的字符串,String、StringBuffer、StringBuilder 有什么区别?
    访问一个HTTPS的网站的大致流程
    Spring Boot Mybatis-Plus
    Spring Boot REST
    Spring Boot 以 war 方式部署
    MVC 框架
    HDFS,MongoDB,HBase的区别和使用场景
    什么时候该用NoSQL?
    最近和朋友微信卖螃蟹有点偏离重心了
    我要出去~
  • 原文地址:https://www.cnblogs.com/captain-dl/p/10671132.html
Copyright © 2011-2022 走看看