leetcode面试题53 - II. 0~n-1中缺失的数字

虽然是道简单题,但还是翻车了,没有看到题目的有序条件。

方法一:

公式法,O(n)

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

方法二:

如果注意到有序,可以用二分。

class Solution {
public:
    int missingNumber(vector<int>& nums) {
        int left = 0, right = nums.size()-1, mid;
        while(left <= right)
        {
            mid = (left + right) >> 1;
            if(nums[mid] == mid)  left = mid+1;
            else  right = mid-1;
        }
        return left;
    }
};

测评机上二分比遍历还慢。。。

posted @ 2020-04-16 12:26  Rogn  阅读(93)  评论(0编辑  收藏