1 Star 1 Fork 2

davidditao / Algorithm-labuladong

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
二分查找.md 2.05 KB
一键复制 编辑 原始数据 按行查看 历史
davidditao 提交于 2022-05-08 12:57 . Add files via upload

将二分查找的三种情况统一成了左闭右闭区间的写法

1. 二分查找

class Solution {
public:
    int bsearch(vector<int>& nums, int target) {
        int left = 0;
        int right = nums.size() - 1;

        while(left <= right){
            int mid = (right - left)/2 + left;
            if(nums[mid] < target){
                left = mid + 1;
            } else if(nums[mid] > target){
                right = mid - 1;
            } else if(nums[mid] == target){
                return mid;
            }
        } 

        return -1;
    }
};

2. 查找左侧边界

class Solution {
public:
    int left_bound(vector<int>& nums, int target) {
        int left = 0, right = nums.size() - 1;
        while (left <= right) {
            int mid = left + (right - left) / 2;
            if (nums[mid] < target) {
                left = mid + 1;
            } else if (nums[mid] > target) {
                right = mid - 1;
            } else if (nums[mid] == target) {
                // 别返回,锁定左侧边界
                right = mid - 1;
            }
        }
        // 最后要检查 left 越界的情况
        if (left >= nums.size() || nums[left] != target) {
            return -1;
        }
        return left;
};

3. 查找右侧边界

class Solution {
public:
    int right_bound(vector<int>& nums, int target) {
        int left = 0, right = nums.size() - 1;
        while (left <= right) {
            int mid = left + (right - left) / 2;
            if (nums[mid] < target) {
                left = mid + 1;
            } else if (nums[mid] > target) {
                right = mid - 1;
            } else if (nums[mid] == target) {
                // 别返回,锁定右侧边界
                left = mid + 1;
            }
        }
        // 最后要检查 right 越界的情况
        if (right < 0 || nums[right] != target) {
            return -1;
        }
        return right;
    }
};
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/davidditao/Algorithm-labuladong.git
git@gitee.com:davidditao/Algorithm-labuladong.git
davidditao
Algorithm-labuladong
Algorithm-labuladong
main

搜索帮助

344bd9b3 5694891 D2dac590 5694891