MD假期要没了啊FUCKING SHIT。。。。
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?
Subscribe to see which companies asked this question
my answer:
class Solution {
public:
int singleNumber(vector<int>& nums) {
if (nums.size() == 1)
return nums.front();
else {
bool first_element = true;
int tmp = nums.front();
for (auto & x : nums) {
if (first_element == true)
first_element = false;
else
tmp ^= x;
}
return tmp;
}
}
};
this algorithm uses XOR as key method to filter the elements in the vector.
For anyone who didn't understood why this works here is an explanation. This XOR operation works because it's like XORing all the numbers by itself. So if the array is {2,1,4,5,2,4,1} then it will be like we are performing this operation
((2^2)^(1^1)^(4^4)^(5)) => (0^0^0^5) => 5.
Hence picking the odd one out ( 5 in this case).