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

方法一:

公式法,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;
    }
};

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

相关文章:

  • 2022-12-23
  • 2021-10-30
  • 2021-10-11
  • 2022-12-23
  • 2021-06-26
  • 2022-12-23
  • 2021-12-10
  • 2021-06-01
猜你喜欢
  • 2021-09-20
  • 2021-12-09
  • 2021-05-15
  • 2021-11-10
  • 2022-12-23
  • 2021-05-19
  • 2021-10-30
相关资源
相似解决方案