268. Missing Number

  1. 题目
    Given an array containing n distinct numbers taken from 0, 1, 2, …, n, find the one that is missing from the array.
    For example,Given nums = [0, 1, 3] return 2.
    Note:Your algorithm should run in linear runtime complexity. Could you implement it using only constant extra space complexity?
    题目大意是:给一个n个数的数组,每个数组的数字是0,1,2…n中不重复的数字。找出缺失的那个数。
  2. 解题思路
    思路1:
    看到这题就想到了以前小学数学题中求1到n的和的问题,这题只要求出1到n的数的和,然后遍历以便数组,求数组中所有数字的和,然后用1到n的和,减去数组中数字的和,就是缺失的数字了。
    思路2:
    在讨论区谈到的,被深深的折服了。
    a=a^b^b;而数组的数字是从0到n中的n个数,只需要将数字异或0-n中的每个数,并且异或数组中的每个数,最后出了数组中没出现的数,其他数字都被异或了两次,只剩下0-n中没出现的的那个数了。

  3. 代码

//思路1
int missingNumber(vector<int>& nums) 
    {
        int nSum = 0;
        int nSize=nums.size();
        for(int i=0;i<nSize ; ++i)
            nSum+=nums[i];
        return nSize*(nSize+1)/2 -nSum;
    }
//思路2
int missingNumber(vector<int>& nums) 
    {
        int i=0 ,nResult=0;
        for( ; i<nums.size() ; ++i)
            nResult = nResult^i^nums[i];
        return nResult^i;
    }
点赞