解题思路
自己先尝试着解这道题,基于我现在的认知,能想到的就是
如果测试数据为 4 1 2 1 2
先排序,1 1 2 2 4
由于题目出现的是除了单独的那个数其他都出现两次。
所以只需要判断当前的数和后面的数是否一样即可,如果一样,则跳过这两个数,不一样就是单独的那个数。
这里只需要注意最后一个数的处理就可以了,即当前的数为2 后面的那个数也为2 那下次循环就会直接到4
但是4之后再也没有其他的数,所以4此时就是单独的数。即最后返回最后一个数即可。
时间复杂度为O(nlogn + n) = O(nlogn)
STL的排序需要O(nlogn)
STL sort time complexity
代码
class Solution {
public:
int singleNumber(vector<int>& nums) {
sort(nums.begin(),nums.end());
for (size_t i = 0;i<nums.size()-1;i++){
if (nums[i] == nums[i+1]) {
i++;
}else{
return nums[i];
}
}
return nums[nums.size()-1];
}
};
但看了discussion之后,居然用XOR的操作
时间复杂度只需要O(n)
int singleNumber(int A[], int n) {
int result = 0;
for (int i = 0; i<n; i++)
{
result ^=A[i];
}
return result;
}
((22)(11)(44)(5)) => (000^5) => 5.