落单的数
描述
笔记
数据
评测
给出2*n + 1 个的数字,除其中一个数字之外其他每个数字均出现两次,找到这个数字。
您在真实的面试中是否遇到过这个题? Yes
样例
给出 [1,2,2,1,3,4,3],返回 4
挑战
一次遍历,常数级的额外空间复杂度
标签
相关题目
解法一:
class Solution {
public:
/**
* @param A: Array of integers.
* return: The single number.
*/
int singleNumber(vector<int> &A) {
// write your code here
if(A.size()==0) return 0;//不要忘了容错
sort(A.begin(),A.end());
map<int,int> m;
for(int i=0;i<A.size()-1;i++){
m[A[i]]++;
if((i%2==1)&&(m[A[i]]!=2)) return A[i-1];
}
return A[A.size()-1];
}
};
解法二:
利用异或
int singleNumber(vector<int> &A) {
// write your code here
if(A.size()==0) return 0;
int ans=0;
for(auto c:A)
ans^=c;
return ans;
}