您的位置:首页 > 其它

[LintCode]82.落单的数

2017-08-19 20:05 162 查看
给出2*n + 1 个的数字,除其中一个数字之外其他每个数字均出现两次,找到这个数字。

样例

给出 [1,2,2,1,3,4,3],返回 4

异或运算:

首先异或表示当两个数的二进制表示,进行异或运算时,当前位的两个二进制表示不同则为1相同则为0.该方法被广泛推广用来统计一个数的1的位数!
参与运算的两个值,如果两个相应bit位相同,则结果为0,否则为1。
即:0^0 = 0, 1^0
= 1, 0^1 = 1, 1^1 = 0
按位异或的3个特点:
(1) 0^0=0,0^1=1  0异或任何数=任何数
(2) 1^0=1,1^1=0  1异或任何数-任何数取反
(3) 任何数异或自己=把自己置0
思路:通过异或,相同的数结果为0,那么最后的结果一定是落单的数字。

class Solution {
public:
/*
* @param A: An integer array
* @return: An integer
*/
int singleNumber(vector<int> A) {
int ans = 0;
for(int i=0; i<A.size(); ++i)
ans ^= A[i];
return ans;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: