题目
给定一个数组,数据都是整数,其中只有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, 0for i in arr:odd ^= iright = odd & (~odd + 1)  # odd的第k位是1,即两个奇数个的数字的第k位一定不同,这里也是个骚操作,它找出了数字最右边的那个1for i in arr:if i & right != 0:odd_one ^= ireturn odd_one, odd_one ^ odd

总结一下,一种位运算操作是:

odd & (~odd + 1)

另一种是

a & (a - 1)

从整数数组中找出唯二奇数次的数字 Python版相关推荐

  1. 数据结构与算法--有序数组中找出和为s的两个数字

    有序数组中找和为s的两个数字 题目:输入一个递增排序的数组array, 和一个数字s, 在数组中找出两个数,使得这两个数的和是s,如果有多对,输出一对即可. 最简单方案 双循环,每次获取一个数据,和数 ...

  2. 给定一个整数数组 nums和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那两个整数,并返回它们的数组下标。

    问: /** 给定一个整数数组 nums和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那两个整数,并返回它们的数组下标. 你可以假设每种输入只会对应一个答案.但是,数 ...

  3. JS实现 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。

    题目:(JS实现) 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 四种方法如下: 方法一:暴力破解法,和值匹配 //暴力 ...

  4. java,给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。

    标题:java,给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 一.示例 二.题解 方法一,暴力法:使用双重for循环,每 ...

  5. 两数之和, 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那两个整数,并返回它们的数组下标。

    两数之和 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target  的那两个整数,并返回它们的数组下标. 可以假设每种输入只会对应一个答案.但是,数组 ...

  6. 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标

    题目链接:https://leetcode-cn.com/problems/two-sum/solution/liang-shu-zhi-he-by-leetcode-2/ 给定一个整数数组 nums ...

  7. 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。

    给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,数组中同一个元素不能使用两遍. ...

  8. 给定一个整数数组 nums 和一个整数目标值 target, 请你在该数组中找出和为目标值 target 的那两个整数, 并返回它们的数组下标

    题目要求: 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出和为目标值 target 的那两个整数,并返回它们的数组下标. [注]从前往后进行匹配, 一旦匹配成功, 便结 ...

  9. (python)给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的两个整数。

    给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的 两个 整数. 你可以假设每种输入只会对应一个答案.但是,你不能重复利用这个数组中同样的元素. 示例: 给定 nu ...

  10. 第1题 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标

    package com.leetcode; import java.util.ArrayList; import java.util.HashMap; import java.util.List; i ...

最新文章

  1. CSV在制药企业中的应用
  2. Nvidia推出强大的新图形芯片Tesl V100加速进军AI和深度学习的步伐
  3. 深度强化学习_深度学习理论与应用第8课 | 深度强化学习
  4. JS性能--DOM编程之重排与重绘
  5. 安卓重构系列-01使用Kotlin开发第一个Demo
  6. MariaDB 在 RedHat Linux 上的安装过程以及 MySQL 相关命令的使用
  7. java string查找_Java lastIndexOf() 方法
  8. 安装新版xampp后apache无法启动提示:Apache Service detected with wrong path解决方案
  9. 无线OSS-高精度整数加法
  10. 用Resource Hacker辅助升级相关测试
  11. Ubuntu安装dos2unix命令
  12. 杭州师范大学计算机科学与技术怎么样,杭州师范大学2020年本科专业录取分数大排名,计算机类专业最低...
  13. 圣诞表白html,圣诞节表白,最浪漫的表白方式
  14. php是什么电器元件,看完这个保证你认识“贴片电路板上”的每一个电子元件
  15. 手机内存卡应该叫外存卡
  16. SQL Server安装提示安装程序无法通过windows update服务搜索更新
  17. 乐高 计算机泡泡龙教案,科学小实验----有趣的泡泡龙
  18. Jenkins基础:Jenkinsfile使用实例:5:使用when进行条件分支处理
  19. elasticsearch实现博客搜索_(eblog)9、博客搜索引擎开发、后台精选
  20. on事件和addevent事件的区别

热门文章

  1. essay--我知道你很难过
  2. java版 ide 卡_完美解决idea突然间很卡的问题
  3. c语言程序c00000fd,怎么处理Win10更新出现0xc00000fd错误代码问题
  4. Java实现 蓝桥杯 基础练习 杨辉三角形
  5. 美信:监控易助力医药行业解决IT运维与业务故障难题
  6. 逆流而上,瑞士加密谷企业数量在行业寒冬中增加至750家
  7. 通过Python机器学习的训练不带电芯充电宝和带电芯充电宝的测试分析
  8. 《孙子兵法》--谋攻第三
  9. 抓包应用分析与静态路由配置
  10. vue-支付模块(pc/h5)集成实现