给定一个整数数组 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 解法相关推荐

  1. Java实现 LeetCode 260 只出现一次的数字 III(三)

    260. 只出现一次的数字 III 给定一个整数数组 nums,其中恰好有两个元素只出现一次,其余所有元素均出现两次. 找出只出现一次的那两个元素. 示例 : 输入: [1,2,1,3,2,5] 输出 ...

  2. LeetCode 260. 只出现一次的数字 III(位运算)

    1. 题目 给定一个整数数组 nums,其中恰好有两个元素只出现一次,其余所有元素均出现两次. 找出只出现一次的那两个元素. 示例 :输入: [1,2,1,3,2,5] 输出: [3,5] 注意: 结 ...

  3. Leetcode 260. 只出现一次的数字 III 解题思路及C++实现

    解题思路: 这道题真有点玄乎,请看:https://blog.csdn.net/smile_watermelon/article/details/47750249 先mark,之后再仔细研究. cla ...

  4. Leetcode 260. 只出现一次的数字 III

    原题链接 解法:异或操作 vector<int> findNumsAppearOnce(vector<int>& nums) {int eO = 0, eOhasOne ...

  5. leetcode 260. Single Number III | 260. 只出现一次的数字 III(位运算:分组异或)

    题目 https://leetcode.com/problems/single-number-iii/ 题解:分组异或 参考1:讨论区题解 you know you can eliminate dou ...

  6. Leecode 260. 只出现一次的数字 III——Leecode每日一题系列

    今天是坚持每日一题打卡的第六天 题目描述 给定一个整数数组 nums,其中恰好有两个元素只出现一次,其余所有元素均出现两次. 找出只出现一次的那两个元素.你可以按 任意顺序 返回答案. 进阶:你的算法 ...

  7. 260. 只出现一次的数字 III 【位运算】

    https://leetcode-cn.com/problems/single-number-iii/ 首先成对的都会删除.只会剩下两个不是一对的数. 首先不难看出 两个数不同,异或后一定会有一个1. ...

  8. LeetCode:136. 只出现一次的数字

    136. 只出现一次的数字 题目: 解题思路: 源码: 踩坑点: 题目: 解题思路: 1.法一: 遍历 nums\text{nums}nums 中的每一个元素 如果某个 nums\text{nums} ...

  9. 【leetcode】只出现一次的数字(位运算)

    LeetCode136:只出现一次的数字 给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次.找出那个只出现了一次的元素. 解题思路: 这里可以使用异或运算.即两个相同的数字异或 ...

最新文章

  1. 首个ML的生物医药大型数据集,3行代码就能运行丨哈佛MIT斯坦福等出品
  2. Kubernetes — Pod
  3. css网页设计实例代码_大型电商平台设计实例:电商平台项目工程、数据库选型、代码库...
  4. 前端学习(2751):uni-app目录设置
  5. 《个人信息保护法》,教我如何做产品!
  6. 牛客网软件测试机考题库,为什么编程题本地测试通过,可是提交时却总报错。求大神们指点。...
  7. Oracel 连接远端服务器
  8. 使用win10 hyper-v安装linux系统
  9. 【BZOJ 1497】 [NOI2006]最大获利
  10. SET-Priority_Queue
  11. c语言double型小数点后几位_程序的数据要放到哪里呢?|C语言第二篇
  12. Gof 设计模式 完结
  13. SPSS学习笔记(三)方差分析ANOVA(F检验)
  14. <树莓派>——无法向U盘写入文件
  15. 关于flash跨域问题
  16. uniapp同目录的相对地址_如何修改手机MAC地址?
  17. 大青山发生火情!内蒙古发生多起祭祖引发的火灾,数十人被拘...
  18. 英超前瞻乐.fun|体育 中秋利物浦主场对战狼队 历史交战能否延续全胜
  19. layui table 获取单元格总是多一个
  20. 211大二计科生高呼:王侯将相宁有种乎?

热门文章

  1. Spring Session实战3
  2. K8S-statefulset-nacos
  3. Java Stream API性能测试
  4. linux相关函数,linux学习-信号相关函数
  5. multiprocessing.manager管理的对象需要加锁吗_iOS内存管理布局-理论篇
  6. Oracle synonym 同义词
  7. Python学习手册之Python介绍、基本语法(二)
  8. Android打包(一)
  9. Eclipse-Java代码规范和质量检查插件-PMD
  10. 中国移动2016年Web应用防火墙集采:绿盟、深信服中标