您好,欢迎来到纷纭教育。
搜索
您的当前位置:首页【LeetCode刷题】704. 二分查找

【LeetCode刷题】704. 二分查找

来源:纷纭教育

1. 题目链接

2. 题目解析

在有序的数组中查找一个等于target的数的下标。下面来介绍一下适应大部分二分查找的两个模板。

2.1. 模板一

{
	// 区间[left, right]
    while(l < r)
    {
        int mid = (l + r) / 2;
        if(条件成立) r = mid;
        else l = mid + 1;
    }
    return r;
}

用模板一跑一下上面的示例。

当nums[mid] >= target,r = mid

那么下一步更新的就是l,然后根据循环条件就会退出,返回值是r,此时l和r是都指向同一个数的,退出条件是l < r。

2.2. 模板2

{
	// 区间[left, right]
    while(l < r)
    {
        int mid = (l + r + 1) / 2;
        if(条件成立) l = mid;
        else r = mid - 1;
    }
    return r;
}

详细的推导可以自行画图验证,这两个模板也是我从书上看到的,分享给大家,希望对大家有帮助。

3. 代码

3.1. 模板1代码

class Solution {
public:
    int search(vector<int>& nums, int target) 
    {
        int l = 0, r = nums.size() - 1;
        while(l < r)
        {
            int mid = (l + r + 1) / 2;
            if(nums[mid] <= target) l = mid;
            else r = mid - 1;
        }
        return nums[r] == target ? r : -1;
    }
};

3.2. 模板2代码

class Solution {
public:
    int search(vector<int>& nums, int target) 
    {
        int l = 0, r = nums.size() - 1;
        while(l < r)
        {
            int mid = (l + r + 1) / 2;
            if(nums[mid] <= target) l = mid;
            else r = mid - 1;
        }
        return nums[r] == target ? r : -1;
    }
};

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- fenyunshixun.cn 版权所有 湘ICP备2023022495号-9

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务