您的位置:首页 > 其它

Single Number

2016-06-20 19:29 253 查看
Single Number:

时间复杂度O(n),不能用额外的存储空间,自己思考实在想不出来,看答案用到了异或运算:

class Solution {
public:
int singleNumber(vector<int>& nums) {
int result = 0;
for (int i = 0; i<nums.size(); i++)
{
result ^=(int)(nums[i]);
}
return result;
}
};

网上找到解释,异或运算是可以交换位置的:
(2^1^4^5^2^4^1) => ((2^2)^(1^1)^(4^4)^(5)) => (0^0^0^5) => 5

完全不明白是怎么交换位置的,后来想到参加异或运算的两个数据,按二进制位进行“异或”运算,比如:
01^11^01^11^10 = 10^10^10 = 00^10 = 10这样最终结果就是只出现了一次的 10.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: