[leetcode] 136. Single Number 解题报告

题目链接:https://leetcode.com/problems/single-number/

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?


思路:如何用hash表来做的话时间复杂度是O(n),空间复杂度是O(n).但是有一种更为巧妙的方法,异或,利用一个数异或本身是0的性质,将数组中的数依次异或,最后生下来的就是只出现一次的数。这题比较思路比较难想,但是如果知道了用异或来做代码比较简单。在剑指offer上的那道要复杂一些,就是所有的数都出现两次,只有两个数只出现一次。思路是相同的,都是异或,最后的得到的结果是两个不同的数异或的结果。然后我们看这个数字哪一位为1则说明两个不一样的数在这一位是不一样的,因此把原数组按照这一位是不是1分为两个数组。这样问题就又回到了我们这题上。

代码如下:

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

参考:剑指offer

你可能感兴趣的:(LeetCode,位运算,算法)