从整数数组中找出唯二奇数次的数字 Python版
题目:
给定一个数组,数据都是整数,其中只有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版相关推荐
- 数据结构与算法--有序数组中找出和为s的两个数字
有序数组中找和为s的两个数字 题目:输入一个递增排序的数组array, 和一个数字s, 在数组中找出两个数,使得这两个数的和是s,如果有多对,输出一对即可. 最简单方案 双循环,每次获取一个数据,和数 ...
- 给定一个整数数组 nums和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那两个整数,并返回它们的数组下标。
问: /** 给定一个整数数组 nums和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那两个整数,并返回它们的数组下标. 你可以假设每种输入只会对应一个答案.但是,数 ...
- JS实现 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
题目:(JS实现) 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 四种方法如下: 方法一:暴力破解法,和值匹配 //暴力 ...
- java,给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
标题:java,给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 一.示例 二.题解 方法一,暴力法:使用双重for循环,每 ...
- 两数之和, 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那两个整数,并返回它们的数组下标。
两数之和 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那两个整数,并返回它们的数组下标. 可以假设每种输入只会对应一个答案.但是,数组 ...
- 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标
题目链接:https://leetcode-cn.com/problems/two-sum/solution/liang-shu-zhi-he-by-leetcode-2/ 给定一个整数数组 nums ...
- 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,数组中同一个元素不能使用两遍. ...
- 给定一个整数数组 nums 和一个整数目标值 target, 请你在该数组中找出和为目标值 target 的那两个整数, 并返回它们的数组下标
题目要求: 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出和为目标值 target 的那两个整数,并返回它们的数组下标. [注]从前往后进行匹配, 一旦匹配成功, 便结 ...
- (python)给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的两个整数。
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的 两个 整数. 你可以假设每种输入只会对应一个答案.但是,你不能重复利用这个数组中同样的元素. 示例: 给定 nu ...
- 第1题 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标
package com.leetcode; import java.util.ArrayList; import java.util.HashMap; import java.util.List; i ...
最新文章
- CSV在制药企业中的应用
- Nvidia推出强大的新图形芯片Tesl V100加速进军AI和深度学习的步伐
- 深度强化学习_深度学习理论与应用第8课 | 深度强化学习
- JS性能--DOM编程之重排与重绘
- 安卓重构系列-01使用Kotlin开发第一个Demo
- MariaDB 在 RedHat Linux 上的安装过程以及 MySQL 相关命令的使用
- java string查找_Java lastIndexOf() 方法
- 安装新版xampp后apache无法启动提示:Apache Service detected with wrong path解决方案
- 无线OSS-高精度整数加法
- 用Resource Hacker辅助升级相关测试
- Ubuntu安装dos2unix命令
- 杭州师范大学计算机科学与技术怎么样,杭州师范大学2020年本科专业录取分数大排名,计算机类专业最低...
- 圣诞表白html,圣诞节表白,最浪漫的表白方式
- php是什么电器元件,看完这个保证你认识“贴片电路板上”的每一个电子元件
- 手机内存卡应该叫外存卡
- SQL Server安装提示安装程序无法通过windows update服务搜索更新
- 乐高 计算机泡泡龙教案,科学小实验----有趣的泡泡龙
- Jenkins基础:Jenkinsfile使用实例:5:使用when进行条件分支处理
- elasticsearch实现博客搜索_(eblog)9、博客搜索引擎开发、后台精选
- on事件和addevent事件的区别