Single Number

来源:互联网 发布:新疆如何绕过网络管制 编辑:程序博客网 时间:2024/06/07 03:33

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.

0 0