标签:针对 number 实现 lse 示例 答案 mask enum 复杂度
题目:
给定一个整数数组 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 };
标签:针对 number 实现 lse 示例 答案 mask enum 复杂度
原文地址:https://www.cnblogs.com/zjuhaohaoxuexi/p/11774241.html