博主在Leetcode上看到一道题,觉得挺有意思,而且解决这道题目的思路很新颖。题目是这样的:
Given a non-empty array of integers, every element appears twice except for one. Find that single one.
Example 1:
Input: [2,2,1]
Output: 1
Example 2:
Input: [4,1,2,1,2]
Output: 4
要解决这道题目巧妙之处在于,用异或方法来解决是很快的。比如说拿[4,1,2,1,2] 来说明:
十进制 | 二进制 |
---|---|
4 | 0100 |
1 | 0001 |
2 | 0010 |
0 | 0000 |
根据异或关系得到:
0^4 = 0000 ^ 0100 = 0100 = 4
4^1 = 0100 ^ 0001 = 0101 = 5
5^2 = 0101 ^ 0010 = 0111 = 7
7^1 = 0111 ^ 0001 = 0110 = 6
6^2 = 0110 ^ 0010 = 0100 = 4
最后输出的结果就是4,也就是single number.
下面就用C来实现这个算法:
int singleNumber(int* nums, int numsSize) {
int single = 0;
for(int i = 0; i<numsSize; i++){
single ^= nums[i];
}
return single;
}
如果上面有哪里写的有瑕疵,请指出来!谢谢。