Solution:
思路:排序后进行左右比对
int singleNumber(vector<int>& nums) {
sort(nums.begin(),nums.end());
for(vector<int>::iterator iter = nums.begin();iter!=nums.end();iter++){
if(iter==nums.begin() && (*iter != *(iter + 1))){
return *iter;
}
else if(iter==(nums.end()-1) && (*iter != *(iter - 1))){
return *iter;
}
else if((*iter != *(iter - 1)) && (*iter != *(iter + 1))){
return *iter;
}
}
}
讨论区看到的答案:附在这里
int singleNumber(int a[], int n) {
//xor all numbers, the left over number would be the non repeated one
// since the equl numbers cancel out each others bits
int num = 0;
for (int i = 0; i < n; ++i) {
num ^= a[i];
}
return num;
}
本文介绍了两种在整数数组中找到唯一出现一次元素的方法。一种是通过排序后比较相邻元素实现;另一种则是利用异或运算特性高效完成任务。后者仅使用一个变量即可解决该问题,具有较好的时间和空间效率。
408

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



