从整数数组中找出唯二奇数次的数字 Python版
来源:互联网 发布:ubuntu命令行升级系统 编辑:程序博客网 时间:2024/05/17 04:33
题目:
给定一个数组,数据都是整数,其中只有2个数字出现了奇数次,其它都是偶数次。找出那2个奇数次的数字。
要求:
时间复杂度o(n),空间复杂度为o(1)。
分析:
如果有两个数字出现了奇数次,比如是 a 和 b,则最终 odd 结果为 a^b,但其中一定有差别。因为数字不一样,所以其异或结果一定不是0,那么也就是其中有一位是1,不论哪一位是1,把数组中所有的那一位是1的数字全部异或,结果就是其中一个出现了奇数次的那个数,再和odd异或,得到另一个数字。
代码:
def print_odd_times_num2(arr): odd, odd_one = 0, 0 for i in arr: odd ^= i right = odd & (~odd + 1) # odd的第k位是1,即两个奇数个的数字的第k位一定不同,这里也是个骚操作,它找出了数字最右边的那个1 for i in arr: if i & right != 0: odd_one ^= i return odd_one, odd_one ^ odd
总结一下,一种位运算操作是:
odd & (~odd + 1)
另一种是
a & (a - 1)
阅读全文
0 0
- 从整数数组中找出唯二奇数次的数字 Python版
- 从数组中找出出现奇数次的那个数 Python版
- 互联网面试题:一个数组中找出三个出现奇数次的数字中的一个
- 互联网面试题:一个数组中找出三个出现奇数次的数字中的一个
- 找出数组中出现奇数次的元素
- 找出数组中出现奇数次的元素
- 找出数组中出现奇数次的元素
- 程序员面试题精选——找出数组中两个只出现一次(奇数次)的数字
- 面试题:从1001个整数元素的数组中找出重复的数字
- 【算法题】找出两个只出现奇数次的数字
- 找出数组中出现奇数次的元素<异或的应用>
- 如何找出数组中出现次数为奇数次的唯一元素
- 某数组中两个数出现奇数次,剩余的出现偶数次,找出这两个数
- 找数组中奇数次的元素
- 在N个数中找出出现奇数次的数
- 输入一个整数数组,调整数组中数字的顺序,使得所有奇数位于偶数前面
- python找出数组中第2大的数字
- 整数数组,一个数字出现了半数以上次,找出这个数字
- 如何去除桌面快捷方式的小箭头
- n个数的排序
- 韬光养晦一周年,拍拍二手品牌为何今日才“亮剑”?
- PCA及白化的数学理解
- ubuntu 16.04源
- 从整数数组中找出唯二奇数次的数字 Python版
- 单链表 c实现 详细注释
- 常用Linux命令
- npm包管理工具的安装及配置使用
- 116. Populating Next Right Pointers in Each Node
- 牛客网 1222 01
- 15算法课程 303. Range Sum Query
- if条件语句 加括号与不加 括号 的区别
- 如何改变Redis用不好的误区