码迷,mamicode.com
首页 > 其他好文 > 详细

260. 只出现一次的数字 III

时间:2019-10-31 23:40:50      阅读:129      评论:0      收藏:0      [点我收藏+]

标签:针对   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 };

 

260. 只出现一次的数字 III

标签:针对   number   实现   lse   示例   答案   mask   enum   复杂度   

原文地址:https://www.cnblogs.com/zjuhaohaoxuexi/p/11774241.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!