problems:
Given a non-empty 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?
Example 1:
Input: [2,2,1]
Output: 1
Example 2:
Input: [4,1,2,1,2]
Output: 4
tip:
本题中要求时间复杂度为o(n),空间复杂度为o(1).先排序再比较的方法不可行。采用异或的方法可以很好地实现。
异或运算性质:X^X=0, X ^ 0 = X, A ^ B ^ C = A ^ C ^ B.
eg:https://blog.csdn.net/xiehuiru/article/details/81407806
00000000 00000000 00000000 00000010 a = 2
^
00000000 00000000 00000000 00000001 b = 1
^
00000000 00000000 00000000 00000100 c = 4
00000000 00000000 00000000 00000111 result = 7
因此不管运算顺序如何,结果都相同。
4 ^ 1 ^ 2 ^ 1 ^ 2 = 1 ^ 1 ^ 2 ^ 2 ^ 4 = 0 ^ 4 = 4
solutions:
class Solution {
public:
int singleNumber(vector<int>& nums)
{
int res = 0;
int n = nums.size();
for(int i=0;i<n;i++)
res = res^nums[i];
return res;
}
};