美文网首页
268. Missing Number

268. Missing Number

作者: 乘瓠散人 | 来源:发表于2017-11-15 11:38 被阅读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;
        
    }
};

相关文章

网友评论

      本文标题:268. Missing Number

      本文链接:https://www.haomeiwen.com/subject/fqycvxtx.html