面试题:元素为32位整数的数组中只有一个数字出现2次,其余都是出现3次,求这个数
来源:互联网 发布:控制反转和依赖注入php 编辑:程序博客网 时间:2024/05/16 19:55
http://blog.renren.com/blog/944770783/727850263?bfrom=01020340100
以上是原文地址,我加了点注释而已。。
def special(lst): ones = 0 twos = 0 for x in lst: twos |= ones & x #等于保存了之前mod3为2的bit和之前mod3为1的bit加上1之后的bit。 ones ^= x #等于只保留了出现次数mod3为1的bit。因为之前就是1的bit,再加一个1就是mod3为2了,所以设为0了,若之前为0,再加1就是mod3位1了 not_threes = ~(ones & twos) #要排除twos中加上一个1后变成mod3为0的bit。ones&twos中为1的bit是之前mod3为2和现在mod3为1的bit,也就是现在mod3为0的值 ones &= not_threes twos &= not_threes return twoslst = (1,1,1,4,4)one = special(lst)print one
其中ones记录了所有出现了模3余1次的bit,twos记录的是余2的。not_threes是当一个bit出现第3次的时候,把它清掉。
最后输出ones(如果题目中那个特殊的数出现了1次,当然如果是出现2次的话,应该输出twos。)
因为mod3余1的数,加上mod3余2的数,必然是mod3余0的数。所以 (twos |= ones & x)&(ones ^= x),即代码中的~not_threes = (ones&twos),就是mod3余0的数
- 面试题:元素为32位整数的数组中只有一个数字出现2次,其余都是出现3次,求这个数
- 求一个整型数组中,只有一个数出现一次,其他的数都出现2次,求这个数?
- 一个全是32位整数的大数组,除了其中一个数字出现2次外,其余的数字都出现了3次。如何找出那个只出现了两次的数字?
- 一个数组,有一个数出现3次,其余出现2次,求出现3次的数,要求时间复杂度<nlogn,空间复杂度O(1)
- 数组中唯一出现一次的一个,两个,三个数,其余数都是偶数次出现(java版本)
- 一个数组中只有两个数字单独出现,其余数字都是成对出现的,请找出这两个数。
- 数组中,一个数出现一次,其余的数都出现2次,找出那个出现一次的数
- 位运算解决“一个数组中,只有一个数字出现n次,其他数字出现k次”问题
- 求一个数组中出现次数只有一次的数次
- 一个数组中所有的数都是成对出现的只有一个或者两个数字是单独的,求这个数
- 一个整数数组,每个数字都出现K次,只有一个数字出现M次,找出这个数字(线性时间)
- 互联网面试题:一个数组中找出三个出现奇数次的数字中的一个
- 互联网面试题:一个数组中找出三个出现奇数次的数字中的一个
- 给定一个数组,其中只有一个数出现一次,别的数都出现3次,找出这个数
- 一个java数学题,给定一个数组,除了一个数出现1次之外,其余数都出现3次,输出出现一次的那个数。
- 一个java数学题,给定一个数组,除了一个数出现1次之外,其余数都出现3次,输出出现一次的那个数。
- 一组数据中只有一个数字出现了一次。其他所有数字都是成对出现的,求这个数字。(使用位运算)
- 数字中所有数出现次数为k次,但有一个不为k次,求出这个数
- Ehcache 工具类
- IE10去掉点击灰块的方法
- typedef用法
- samba共享
- NVIDIA驱动安装记录
- 面试题:元素为32位整数的数组中只有一个数字出现2次,其余都是出现3次,求这个数
- Django 初识 - 视图和url配置
- 黑马程序员_面向对象第6天
- Hibernate模糊查询后台打印乱码[java]
- Android应用的彻底关闭
- 在Android中使用加载器(Loader)来实现获取本机中的所有图片,并进行查看图片的效果
- cocos2d-x节点(b2Draw.h)API
- cocos2d-x节点(b2BlockAllocator.h)API
- cocos2d-x节点(b2GrowableStack.h)API