【Single Number】cpp

题目

Given an 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?

代码

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

Tips:

核心思想是用异或运算。

1. 异或运算满足结合律、交换律;结合这两条定律。

2. 出现偶数次的数最终都会对冲掉,成为0;最后剩下那个只出现奇数次的数

3. 任何数与0异或都是其本身

=========================================

第二次过这道题,一次AC,考查的是位运算的技巧。

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

 

posted on 2015-04-27 14:37  承续缘  阅读(162)  评论(0编辑  收藏  举报

导航