268. Missing Number

2017-11-15  本文已影响5人  乘瓠散人

我的解法:

class Solution {
public:
    int missingNumber(vector<int>& nums) {
        int n=nums.size();
        nums.push_back(n+1);
        int flag=0;
        for(int i=0;i<n;i++){
            int t=abs(nums[i]);
            if(t==0) flag=i;
            nums[t] = nums[t] > 0 ? -nums[t] : nums[t];
            
        }
        for(int i=0;i<n+1;i++){
            if(nums[i] > 0){  //此处可以解决[1, 0]; 但是判断的是nums[i]>0,那么也有可能为0,并且这个0没有被置为负0,如[2,0] ; 
                return i;
            }
        }
        return flag;  //比如:[2, 0],
        
    }
};

答案提供给了多种优化方法:
最简单的是高斯公式:(思维定式限制了我的想象力orz)

class Solution {
public:
    int missingNumber(vector<int>& nums) {
        int n=nums.size();
        int sum=0;
        
        for(int i=0;i<n;i++){
            sum+=nums[i];
        }
        
        int cnt=n*(n+1)/2;
        return cnt-sum;
        
    }
};
上一篇下一篇

猜你喜欢

热点阅读