Given an array of integers, every element appears twice except for one. Find that single one.
Note:
Your algorithm should have a linear runtime complexity. Could you implement it without using extra memory?
翻译:
在某一个数组当中,除了其中一个元素以外,其他元素均出现两次,请找出只出现一次的元素
要求:
时间复杂度为O (n)空间复杂度为O(1)
笔记:
在开始的时候当然想到的是将遍历过的元素hash起来就能记录每个元素出现的次数了
但是这样的空间复杂度就不是O(1)了。那么要怎么办呢?
这题对与我这样的菜鸟来说是属于打开新世界的大门系列。
但是其实思路很简单,用按位异或的话因为每一个数都出现两次,在所有的元素相互之间异或过一次以后,剩下的当然是只出现一次的元素与0的异或,那便是本身了
class Solution {
public:
int singleNumber(vector<int>& nums) {
std::vector<int>::iterator it = nums.begin();
int result=*it;
it++;
for(;it!=nums.end();it++){
result=result ^ (*it);
}
return result;
}
};