概述
本篇文章记录剑指offer标签为二分查找类的题。二分的模板太多了,本篇文章用的二分模板都是我之前发过的模板,附上链接:【算法模板】二分查找。下面的题都是在力扣上面做的,可以按照题名搜索即可
题不太多,建议刷刷leetcode上面二分的题,leetcode上面刷个10多道就够了
剑指 Offer 53 - II 0~n-1中缺失的数字
二分
由题意,我们可以将该数组分成两部分
第一部分是0 - x-1
中, i = nums[i]
, 第二部分是x - n - 1
种中, i != nums[i]
的则可以使用二分查找,我们要找到位置就是第一个i != nums[i]
的位置。
边界情况是整个数组都是上图中蓝颜色的部分,我们要返回的值就是下一个数了
时间复杂度O(logN),空间复杂度O(1)
代码:
class Solution {
public:
int getMissingNumber(vector<int>& nums) {
if (nums.empty()) return 0;
int l = 0 , r = nums.size() - 1;
//二分查找,找到第一个 i != nums[i]的位置
while ( l < r){
int mid = l + r >> 1;
if