题目:
Given an array of numbers nums, in which exactly two elements appear only once and all
the other elements appear exactly twice. Find the two elements that appear only once.
For example:
Given nums = [1, 2, 1, 3, 2, 5], return [3,
5].
Note:
- The order of the result is not important. So in the above example,
[5, 3]is also correct. - Your algorithm should run in linear runtime complexity. Could you implement it using only constant space complexity?
题解:求数组中两个唯一出现一次的两个数,由于知道用0遍历异或数组一遍可得到所求两个数的异或值,则由求所得值位为1则表示要求的两个数在那一位值不一样,则可用这不一样的位将原数组分为两个部分,两个不一样的数必然在不同部分中,各自异或遍历则可得到。
代码:
class Solution {
public:
vector<int> singleNumber(vector<int>& nums) {
vector<int>a(2,0);
int res=0;
int bit=0;
for(int i=0;i<nums.size();i++)
res^=nums[i];
bit=res&(~(res-1));
for(int j=0;j<nums.size();j++)
{
if((bit&nums[j])==0)
a[0]^=nums[j];
else
a[1]^=nums[j];
}
return a;
}
};
本文介绍了一种线性时间复杂度的算法来找出数组中仅出现一次的两个元素,并通过位操作实现常数空间复杂度。

300

被折叠的 条评论
为什么被折叠?



