二进制中1的个数

二进制中1的个数

http://www.nowcoder.com/questionTerminal/8ee967e43c2c4ec193b040ea7fbb10b8

int  NumberOf1(int n) {
         int cnt=0;
         for(int i=0;i<32;++i)
         {
             cnt+=n&1;
             n>>=1;
         }
         return cnt;
     }

将n于1相与,即判断最后一位是否为1,是1则计数为加1,不是加0;
判断完后n向右移1位,判断下一位是否为1;
输入为int类型,总共32位,所以for循环32次;
这样的好处在于不用区分负数和正数,因为只循环32次,没有理会左边补位1还是0.时间复杂度,空间复杂度均为O(1)。

全部评论

相关推荐

虚闻松声:简历看起来很清爽。几点建议。 1. 总结提炼项目工作内容。如第一个项目第一点,研发用户信息管理、购票功能:(然后具体展开)。还可以继续总结,如基础功能开发、算法优化座位分配、并发性能提升等等 2. 优化技术栈描述。全文多次出现Spring Boot,我感觉一次就够了。可以不写或者写整个体技术架构? 3. 增加业务指标描述。最好有一些业务效果的指标。或者优化的效果指标等等。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务