剑指offer(8)
题目:
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
思路:
第一反应想到的是把数右移,每一位与1相与,然后判断个数,但是若输入的为负数,会出现死循环现象。
所以我们设置一个标志量1,首先把输入数与1相与,判断,接着,左移标志量,继续接着判断,直到标志位超出系统位数,全变成0为止,这样就可以避免输入负数,出现死循环的现象。
public class Solution {
    public int NumberOf1(int n) {
        int flag = 1;
        int count = 0;
        while(flag!=0){
            if((n&flag)!=0){
                count++;
            }
            flag=flag<<1;
        }
        return count;
    }
}
但是这个解法中,如果系统是32位,需要判断32次,接下来的算法中,整数中有几个1就只需循环几次。
输入数如果不是0,那么至少有一位是0,当我们把这个数减一,若最右边的1在m位,且最后一位是0,那么m-1位至最后位全变成1,m位变为0,例如101000,前文m位即为倒数第四位,当减一时,m位变成0,而m位之后全变成1,此时让这个输入数-1与之前的输入数做与运算,会发现我们是在做“去1”运算,当输入数中有k个1,那么我们完成k次的"去1"运算后,输入数将会变成0。
public class Solution {
    public int NumberOf1(int n) {
         int count = 0;
        while(n!= 0){
            count++;
            n = n & (n - 1);
         }
        return count;
    }
}
剑指offer(8)的更多相关文章
- 剑指Offer面试题:1.实现Singleton模式
		
说来惭愧,自己在毕业之前就该好好看看<剑指Offer>这本书的,但是各种原因就是没看,也因此错过了很多机会,后悔莫及.但是后悔是没用的,现在趁还有余力,把这本书好好看一遍,并通过C#通通实 ...
 - 剑指Offer面试题:14.链表的倒数第k个节点
		
PS:这是一道出境率极高的题目,记得去年参加校园招聘时我看到了3次,但是每次写的都不完善. 一.题目:链表的倒数第k个节点 题目:输入一个链表,输出该链表中倒数第k个结点.为了符合大多数人的习惯,本题 ...
 - 《剑指offer》面试题12:打印1到最大的n位数
		
面试题12:打印1到最大的n位数 剑指offer题目12,题目如下 输入数字n,按顺序打印出1到最大的n位十进制数,比如输入3,则打印出1,2,3一直到最大的三位数999 方法一 和面试题11< ...
 - 《剑指offer》面试题11: 数值的整数次方
		
面试题11: 数值的整数次方 剑指offer面试题11,题目如下 实现函数double power(double base,int exponent),求base的exponent次方, 不得使用库 ...
 - 剑指 Offer 题目汇总索引
		
剑指 Offer 总目录:(共50道大题) 1. 赋值运算符函数(或应说复制拷贝函数问题) 2. 实现 Singleton 模式 (C#) 3.二维数组中的查找 4.替换空格 ...
 - 面试题目——《剑指Offer》
		
1.把一个字符串转换成整数——<剑指Offer>P29 2.求链表中的倒数第k个结点——<剑指Offer>P30 3.实现Singleton模式——<剑指Offer> ...
 - 剑指offer习题集2
		
1.把数组排成最小的数 class Solution { public: static bool compare(const string& s1, const string& s2) ...
 - 剑指offer习题集1
		
1.打印二叉树 程序很简单,但是其中犯了一个小错误,死活找不到,写代码要注意啊 这里左右子树,要注意是node->left,结果写成root->left vector<int> ...
 - 剑指Offer:面试题20——顺时针打印矩阵(java实现)
		
题目描述: 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数 字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1, ...
 - 牛客网上的剑指offer题目
		
题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 题目:请实现一个函数,将一 ...
 
随机推荐
- 【ZJOI2012】灾难
			
[ZJOI2012]灾难 阿米巴是小强的好朋友. 阿米巴和小强在草原上捉蚂蚱.小强突然想,如果蚂蚱被他们捉灭绝了,那么吃蚂蚱的小鸟就会饿死,而捕食小鸟的猛禽也会跟着灭绝,从而引发一系列的生态灾难. 学 ...
 - servlet是线程安全的么
			
servlet生命周期 三个重要方法 1 init() 进行资源的加载 2 service() 处理请求,根据请求方式,调用doGet或者doPost 3 destroy() 进行资源的释放 ser ...
 - redis 查找附近的人
			
儿童定位手表,有个交友功能,查找附近的人,用redis的geo来实现比较简单,其实是一个ZSET(有序集合) redis 版本要大于3.2 查看redis 版本 /usr/bin/redis-s ...
 - socket编程解决粘包和丢包问题
			
##socket 丢包粘包解决方式 采用固定头部长度(一般为4个字节),包头保存的是包体的长度 header+body 包头+包体 下面的例子不是按照上图中规定的格式编写的,但是思路都是一样的,先读出 ...
 - ssm框架的整合搭建(一)
			
一个转行菜鸟半年多工作的开始学习历程............ 我是自学,也是我的记录,我学习的见证,如果你有幸看见,不要吐槽,不足之处请指点,相互学习,谢谢!! 请一起共勉!!!!!!!! 使用技术: ...
 - 吴恩达课后作业学习2-week2-优化算法
			
参考:https://blog.csdn.net/u013733326/article/details/79907419 希望大家直接到上面的网址去查看代码,下面是本人的笔记 我们需要做以下几件事: ...
 - python3 内置函数
			
'''iter()和next()'''# lst = [1, 2, 3]# it = iter(lst)# print(it.__next__())# print(it.__next__())# pr ...
 - mysql远程连接 Host * is not allowed to connect to this MySQL server
			
mysql -u root -p mysql>use mysql; mysql>update user set host =’%'where user =’root’; mysql> ...
 - face recognition[Euclidean-distance-based loss][FaceNet]
			
本文来自<FaceNet: A Unified Embedding for Face Recognition and Clustering>.时间线为2015年6月.是谷歌的作品. 0 引 ...
 - IDE安装Lombok插件提高开发效率
			
Lombok官方api:https://projectlombok.org/features/index.html 使用lombok之后,省去了许多没必要的get,set,toString,equal ...