leetcode_268.missing number

给定一个数组nums,其中包含0--n中的n个数,找到数组中没有出现的那个数。

解法一:cyclic swapping algorithm

class Solution
{
public:
    int missingNumber(vector<int>& nums)
    {
        nums.push_back(-1);
        int len=nums.size();
        for(int i=0;i<len;i++)
        {
            while(nums[i]>=0 && nums[i]!=i)
                swap(nums[i], nums[nums[i]]);
        }
        for(int i=0;i<=len;i++)
            if(nums[i]==-1)
                return i;
        return -1;
    }
};

解法二:用(1+n)*n/2减掉数组中所有数,就是没有出现的那个数。

class Solution
{
public:
    int missingNumber(vector<int>& nums)
    {
        int n=nums.size(), sum = (1+n)*n/2;
        for(int i:nums)
            sum -= i;
        return sum;
    }
};

解法三:使用异或运算符,a^b^b=a。

class Solution
{
public:
    int missingNumber(vector<int>& nums)
    {
        int result = nums.size();
        for(int i=0;i<nums.size();i++)
            result = result^i^nums[i];
        return result;
    }
};
原文地址:https://www.cnblogs.com/jasonlixuetao/p/10776701.html