260. 只出现一次的数字 III
Posted zjuhaohaoxuexi
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了260. 只出现一次的数字 III相关的知识,希望对你有一定的参考价值。
题目:
给定一个整数数组 nums,其中恰好有两个元素只出现一次,其余所有元素均出现两次。
找出只出现一次的那两个元素。
示例 :
输入: [1,2,1,3,2,5]
输出: [3,5]
注意:
结果输出的顺序并不重要,对于上面的例子, [5, 3] 也是正确答案。
你的算法应该具有线性时间复杂度。你能否仅使用常数空间复杂度来实现?
思路:
总体思路利用了136针对一个元素情况时的解法,针对这道题,需要做的是如何把数组中的元素分到要找的这两个不同元素所在的不同的"族"中。
代码:
1 class Solution {
2 public:
3 vector<int> singleNumber(vector<int>& nums) {
4 int n = nums.size();
5 if(n < 2)
6 return {};
7 int ab = 0;
8 for(int i = 0;i < n;i++)
9 ab^=nums[i];
10 int i = 0;
11 for(;i < sizeof(int)*8;i++)
12 {
13 int mask = 1<<i;
14 if((mask & ab)!=0)
15 break;
16 }
17 int a = 0;
18 int b = 0;
19 for(int j = 0;j < n;j++)
20 {
21 int mask = 1<<i;
22 if(mask & nums[j])
23 a^=nums[j];
24 else
25 b^=nums[j];
26 }
27 return {a,b};
28
29 }
30 };
以上是关于260. 只出现一次的数字 III的主要内容,如果未能解决你的问题,请参考以下文章
LeetCode Java刷题笔记—260. 只出现一次的数字 III