leetcode-260.只出现一次的数字 III 解法
给定一个整数数组 nums,其中恰好有两个元素只出现一次,其余所有元素均出现两次。 找出只出现一次的那两个元素。
示例 :
输入: [1,2,1,3,2,5]
输出: [3,5]
注意:
结果输出的顺序并不重要,对于上面的例子, [5, 3] 也是正确答案。
你的算法应该具有线性时间复杂度。你能否仅使用常数空间复杂度来实现?
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/single-number-iii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
这一个问题与我们上一次完成的leetcode-136很像,它将只出现一次的元素换成了两个
leetcode-136 解法:https://blog.csdn.net/qq_35423154/article/details/101792655
对于这个问题,我们不能再像上次一样直接遍历异或,因为有两个只出现了一次的元素,我们需要找一个方法来把它们两个分开。
设
于是我们能想到,首先我们先按照上次的写法将数组遍历一遍,得到了它们两个的异或值
for(i=0; i<nums.size(); i++){flag ^= nums[i];}
我们就得到了它们二进制位的关系,然后我们需要得到它们在某一位上的不同,借助那个不同将数组分为两个,例如:
5:0101
13:1101
5^13:1000
我们可以借助这个1,将数组中该项为1的数分成一份,该项为0的数分为一份,这样我们遍历异或就可以直接得到答案。
但如果多个位上存在1时,我们只需要取一个
所以:
flag &= -flag;
如:
00001101
取负数得:
11110011
取与得:
00000001
即可得到单独二进制位上的1
下面再继续用上次的解法
{if((nums[i] & flag) ==0)x ^= nums[i];elsey ^= nums[i];}
即可分别得到x,y的值
完整代码如下
class Solution {
public:vector<int> singleNumber(vector<int>& nums) {int flag=0,i,x=0,y=0;for(i=0; i<nums.size(); i++){flag ^= nums[i];}flag &= -flag;for(i=0; i<nums.size(); i++){if((nums[i] & flag) ==0)x ^= nums[i];elsey ^= nums[i];}return {x,y};}};
leetcode-260.只出现一次的数字 III 解法相关推荐
- Java实现 LeetCode 260 只出现一次的数字 III(三)
260. 只出现一次的数字 III 给定一个整数数组 nums,其中恰好有两个元素只出现一次,其余所有元素均出现两次. 找出只出现一次的那两个元素. 示例 : 输入: [1,2,1,3,2,5] 输出 ...
- LeetCode 260. 只出现一次的数字 III(位运算)
1. 题目 给定一个整数数组 nums,其中恰好有两个元素只出现一次,其余所有元素均出现两次. 找出只出现一次的那两个元素. 示例 :输入: [1,2,1,3,2,5] 输出: [3,5] 注意: 结 ...
- Leetcode 260. 只出现一次的数字 III 解题思路及C++实现
解题思路: 这道题真有点玄乎,请看:https://blog.csdn.net/smile_watermelon/article/details/47750249 先mark,之后再仔细研究. cla ...
- Leetcode 260. 只出现一次的数字 III
原题链接 解法:异或操作 vector<int> findNumsAppearOnce(vector<int>& nums) {int eO = 0, eOhasOne ...
- leetcode 260. Single Number III | 260. 只出现一次的数字 III(位运算:分组异或)
题目 https://leetcode.com/problems/single-number-iii/ 题解:分组异或 参考1:讨论区题解 you know you can eliminate dou ...
- Leecode 260. 只出现一次的数字 III——Leecode每日一题系列
今天是坚持每日一题打卡的第六天 题目描述 给定一个整数数组 nums,其中恰好有两个元素只出现一次,其余所有元素均出现两次. 找出只出现一次的那两个元素.你可以按 任意顺序 返回答案. 进阶:你的算法 ...
- 260. 只出现一次的数字 III 【位运算】
https://leetcode-cn.com/problems/single-number-iii/ 首先成对的都会删除.只会剩下两个不是一对的数. 首先不难看出 两个数不同,异或后一定会有一个1. ...
- LeetCode:136. 只出现一次的数字
136. 只出现一次的数字 题目: 解题思路: 源码: 踩坑点: 题目: 解题思路: 1.法一: 遍历 nums\text{nums}nums 中的每一个元素 如果某个 nums\text{nums} ...
- 【leetcode】只出现一次的数字(位运算)
LeetCode136:只出现一次的数字 给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次.找出那个只出现了一次的元素. 解题思路: 这里可以使用异或运算.即两个相同的数字异或 ...
最新文章
- 首个ML的生物医药大型数据集,3行代码就能运行丨哈佛MIT斯坦福等出品
- Kubernetes — Pod
- css网页设计实例代码_大型电商平台设计实例:电商平台项目工程、数据库选型、代码库...
- 前端学习(2751):uni-app目录设置
- 《个人信息保护法》,教我如何做产品!
- 牛客网软件测试机考题库,为什么编程题本地测试通过,可是提交时却总报错。求大神们指点。...
- Oracel 连接远端服务器
- 使用win10 hyper-v安装linux系统
- 【BZOJ 1497】 [NOI2006]最大获利
- SET-Priority_Queue
- c语言double型小数点后几位_程序的数据要放到哪里呢?|C语言第二篇
- Gof 设计模式 完结
- SPSS学习笔记(三)方差分析ANOVA(F检验)
- <树莓派>——无法向U盘写入文件
- 关于flash跨域问题
- uniapp同目录的相对地址_如何修改手机MAC地址?
- 大青山发生火情!内蒙古发生多起祭祖引发的火灾,数十人被拘...
- 英超前瞻乐.fun|体育 中秋利物浦主场对战狼队 历史交战能否延续全胜
- layui table 获取单元格总是多一个
- 211大二计科生高呼:王侯将相宁有种乎?