1. 题目

一个整型数组 nums 里除两个数字之外,其他数字都出现了两次。请写程序找出这两个只出现一次的数字。

要求时间复杂度是O(n),空间复杂度是O(1)

示例 1:
输入:nums = [4,1,4,6]
输出:[1,6] 或 [6,1]示例 2:
输入:nums = [1,2,10,4,1,4,3,3]
输出:[2,10] 或 [10,2]限制:
2 <= nums <= 10000

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/shu-zu-zhong-shu-zi-chu-xian-de-ci-shu-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

类似题目:

LeetCode 136. 只出现一次的数字(异或^)
LeetCode 137. 只出现一次的数字 II(位运算)

2. 解题

  • 对数组所有的值全部异或,得到想要求的两个数的异或值
  • 找到该异或值为1的bit
  • 用该bit将数组的值分成两组来,分别求取异或值,即得2个唯一的数
class Solution {public:vector<int> singleNumbers(vector<int>& nums) {int i, XOR = 0;for(i = 0; i < nums.size(); ++i)XOR ^= nums[i];for(i = 0; i < 32; ++i){if(XOR & (1<<i))break;}int a = 0, b = 0;for(auto& n : nums){if(n&(1<<i))a ^= n;elseb ^= n;}return {a, b};}
};

剑指Offer - 面试题56 - I. 数组中数字出现的次数(异或,分组)相关推荐

  1. 剑指Offer(第二版)面试题56:数组中数字出现的次数

    (尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/73609133冷血之心的博客) 剑指Offer(第二版)面试题56: ...

  2. 剑指offer——面试题51:数组中重复的数字

    剑指offer--面试题51:数组中重复的数字 Solution1: 20180910更新.利用数组做一次hash映射,时间复杂度为O(n)O(n)O(n),空间复杂度O(n)O(n)O(n). cl ...

  3. 【难题+重点】剑指offer——面试题40:数组中只出现一次的数字

    剑指offer--面试题40:数组中只出现一次的数字 Solution1: 书中展示了很棒的思路: 关于异或的两个性质应该知道: (1) X^X = 0; (2) X^0 = X; class Sol ...

  4. 【重点】剑指offer——面试题36:数组中的逆序对

    剑指offer--面试题36:数组中的逆序对 Solution1: 20180905整理 参考网址:https://www.nowcoder.com/profile/4474567/codeBookD ...

  5. 剑指offer——面试题29:数组中出现次数超过一半的数字

    剑指offer--面试题29:数组中出现次数超过一半的数字 Solution1: 20180902日整理 注意几点: 1.若下一个数字和我们之前保存的数字相同,则次数 +1 2.若下一个数字和我们之前 ...

  6. C++版 - 剑指Offer 面试题36:数组中的逆序对及其变形(Leetcode 315. Count of Smaller Numbers After Self)题解

    剑指Offer 面试题36:数组中的逆序对 题目:在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对.输入一个数组,求出这个数组中的逆序对的总数. 例如, 在数组{7,5, ...

  7. 面试题56 - I. 数组中数字出现的次数

    复杂度分析 时间复杂度:O(n),我们只需要遍历数组两次. 空间复杂度:O(1),只需要常数的空间存放若干变量. 看面试官复杂度要求 相关题目:https://blog.csdn.net/INGNIG ...

  8. 剑指offer——面试题56:链表中环的入口

    剑指offer--面试题56:链表中环的入口 Solution1: 非常经典的快慢指针套路题.下面这个链接讲解的很详细.其实问题的关键在于为什么快指针的速度一定是慢指针的2倍,3倍或4倍行不行?? 快 ...

  9. 【有返回值的回溯法】剑指offer——面试题66:矩阵中的路径(回溯法)

    剑指offer--面试题66:矩阵中的路径(回溯法) Solution:1 典型的回溯算法及代码 此题是回溯法的典型例题,思路以及代码均是书中所讲.要具体实现很有参考价值,借鉴之! 现在把书中代码贴在 ...

最新文章

  1. presto能连接mysql和hive吗_Presto连接Hive
  2. Python学习之路29-序列的修改、散列和切片
  3. 华表 单元格公式设定与计算
  4. CF720C Homework(构造)(暴力)
  5. 会议交流 | CAAI BDSC2021大会专题七:社会计算与开放知识图谱
  6. 计算机版初中语文课文原文,《背影》课文原文
  7. P2604 [ZJOI2010]网络扩容
  8. 2019华北五省计算机应用大赛官网,“远洋航空杯”2019年华北五省(市、自治区) 及港澳台大学生计算机应用大赛举行...
  9. HBase原理-数据读取流程解析
  10. 免费从网盘下载的卫星影像和高程DEM如何使用?
  11. 华为转正答辩ppt范文_华为转正答辩模板下载ppt课件.ppt
  12. 安防意识增强 澳洲迈向新发展
  13. 计算机键盘的大写键,Win10系统键盘大小写切换键(Caps Lock)失灵了如何解决
  14. .net中获取MD5码
  15. 查看XBox360的系统版本信息
  16. 线性回归的scikit-learn实现
  17. STM32F407系统标准库函数之时钟配置 和 位带操作
  18. 移植wifi无线网卡到arm linux上全过程
  19. 阿里珍贵技术资料免费下载
  20. 单目视觉测距matlab,单目视觉测量系统误差分析.pdf

热门文章

  1. golang switch_为什么程序员都不喜欢使用 switch ,而是大量的 if……else if ?
  2. C++的迭代器Interator
  3. 和aes相比较有哪些特点_“黑枸杞”和“红枸杞”相比较,功效方面究竟存在哪些差别?...
  4. access 根据id删除数据_小程序云开发之数据库自动备份丨云开发101
  5. linux内核的一些常识介绍
  6. mysql重新用户设置密码_mysql用户密码如何重新设置?
  7. 树莓派安装CentOS
  8. Jquery 实现原理之 Ajax
  9. JAVA中获得一个月最大天数的方法(备忘)
  10. ACDSee Photo Manager 12 中文绿色版