leetcode single number系列
2016-08-05 16:22
330 查看
这个系列一共有三题,第一题是一组数里除了一个数出现一次之外,其他数都是成对出现,求这个数。
第二题是一组数里除了两个数出现一次外,其他数都是成对出现,求这两个数
第三题是一组数里除了一个数出现一次外,其他数都是出现三次,求这个数。
先说第一题,这题很简单,就是将所有的数全部异或一遍,由于两个相同的数异或之后得到0,所以最后得到的结果就是要求的那个数。
第二题有点难,
解题方法是,设所求的那两个数为n1,n2。那么n1和n2必然不相等,那么它们必然至少有一个bit的值不等。
那么与题1一样,将所有的数异或一遍,得到一个结果为n1^n2。利用这个数字求出n1与n2在哪个位置上不等,设为m。
然后将所有的数分成两组,一组为在位置m上为1的数,一组为在位置m上为0的数。那么n1,n2必然分在两个组。
这样题目就转换为了题1。
第三题的思路为
设要求的那个数为n,如果n在bit 0上为1,那么在bit 0上所有数的和必然不能被3整除,反之,必然可以被3整除。
以此类推算出所有位置上的值。
第二题是一组数里除了两个数出现一次外,其他数都是成对出现,求这两个数
第三题是一组数里除了一个数出现一次外,其他数都是出现三次,求这个数。
先说第一题,这题很简单,就是将所有的数全部异或一遍,由于两个相同的数异或之后得到0,所以最后得到的结果就是要求的那个数。
第二题有点难,
解题方法是,设所求的那两个数为n1,n2。那么n1和n2必然不相等,那么它们必然至少有一个bit的值不等。
那么与题1一样,将所有的数异或一遍,得到一个结果为n1^n2。利用这个数字求出n1与n2在哪个位置上不等,设为m。
然后将所有的数分成两组,一组为在位置m上为1的数,一组为在位置m上为0的数。那么n1,n2必然分在两个组。
这样题目就转换为了题1。
第三题的思路为
设要求的那个数为n,如果n在bit 0上为1,那么在bit 0上所有数的和必然不能被3整除,反之,必然可以被3整除。
以此类推算出所有位置上的值。
相关文章推荐
- js写的5秒钟倒计时跳转
- bzoj3670 noi2014动物园(kmp)
- 由于系统缓冲区空间不足或队列已满,不能执行套接字上的操作
- js实现精确到毫秒的倒计时效果
- resource
- Linux驱动开发 -- 打开dev_dbg()
- (13)递增递减运算符 (14)字符串运算符 (15)赋值运算符 (16)switch case语句
- 写给想当程序员的朋友
- Android平台Native开发与JNI机制详解
- 51Nod-1021-石子归并
- Python进程、线程、协程详解
- PasswordHasher
- centos6.5-64bit安装htop
- Design Patterns Simplified - Part 3 (Simple Factory)【设计模式简述--第三部分(简单工厂)】
- hdu 2647 Reward(拓扑排序)
- 分类算法—决策树
- H5学习之22 CSS-导航栏的创建
- java 线程同步
- FFmpeg移植Android编译生成多库
- WebUploader文件图片上传插件的使用