美文网首页
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