当前位置: 首页 > news >正文

算法模板(二分法开区间模板,二分法闭区间模板)

二分法闭区间模板:

class Solution {

    // lower_bound 返回最小的满足 nums[i] >= target 的 i

    // 如果数组为空,或者所有数都 < target,则返回 nums.size()

    // 要求 nums 是非递减的,即 nums[i] <= nums[i + 1]


    // 闭区间写法

    int lower_bound(vector<int>& nums, int target) {

        int left = 0, right = (int) nums.size() - 1; // 闭区间 [left, right]

        while (left <= right) { // 区间不为空

            // 循环不变量:

            // nums[left-1] < target

            // nums[right+1] >= target

            int mid = left + (right - left) / 2;

            if (nums[mid] < target) {

                left = mid + 1; // 范围缩小到 [mid+1, right]

            } else {

                right = mid - 1; // 范围缩小到 [left, mid-1]

            }
        }
        return left;
    }

二分法开区间模板:

// 开区间写法

    int lower_bound3(vector<int>& nums, int target) {

        int left = -1, right = nums.size(); // 开区间 (left, right)

        while (left + 1 < right) { // 区间不为空

            // 循环不变量:

            // nums[left] < target

            // nums[right] >= target

            int mid = left + (right - left) / 2;

            if (nums[mid] < target) {

                left = mid; // 范围缩小到 (mid, right)

            } else {

                right = mid; // 范围缩小到 (left, mid)

            }

        }

        return right;

    }

二分法左闭右开区间写法:

// 左闭右开区间写法

    int lower_bound2(vector<int>& nums, int target) {

        int left = 0, right = nums.size(); // 左闭右开区间 [left, right)

        while (left < right) { // 区间不为空

            // 循环不变量:

            // nums[left-1] < target

            // nums[right] >= target

            int mid = left + (right - left) / 2;

            if (nums[mid] < target) {

                left = mid + 1; // 范围缩小到 [mid+1, right)

            } else {

                right = mid; // 范围缩小到 [left, mid)

            }

        }

        return left;

    }

视频链接:二分查找为什么总是写错?_哔哩哔哩_bilibili

来源:35. 搜索插入位置 - 力扣(LeetCode)

相关文章:

  • 【华三】STP的角色选举(一文讲透)
  • 市场趋势中突破确认的多维度判断方法
  • 【简历优化】性能调优 — 编程性能调优篇
  • Linux远程kill进程及$处理
  • java练习(36)
  • 如何在 React 中测试高阶组件?
  • python: SQLAlchemy (ORM) Simple example using mysql in Ubuntu 24.04
  • Docker挂载数据显式挂载和隐式挂载的区别
  • DeepSeek掘金——VSCode 接入DeepSeek V3大模型,附使用说明
  • ubuntu ffmpeg 安装踩坑
  • Liunx(CentOS-6-x86_64)系统安装MySql(5.6.50)
  • 基于灾害链动仿真分析路径
  • 为AI聊天工具添加一个知识系统 之115 详细设计之56 知识表征 之2
  • Linux修改主机名称
  • c#编程:学习Linq,重几个简单示例开始
  • logging-operator 部署fluentd-bit日志报kubernetes链接错误
  • 【弹性计算】虚拟化技术
  • 报错:Cannot read properties of null (reading ‘ce‘)解决方法
  • C 端产品-用户的分群图纸 - AxureMost
  • 机器学习实战(12):项目实战—端到端的机器学习项目Kaggle糖尿病预测
  • 重庆网站建设公司费用/百度怎么推广自己的信息
  • wordpress url参数/seo 是什么
  • 梵克雅宝官网中国官方网站/开网店怎么开 新手无货源
  • 长治网站建设龙采科技技术支持/百度服务中心投诉
  • 怎么做网站注册的网页/江苏seo团队
  • 自己做的网站打不开怎么搞/抚州网络推广