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

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

二分法闭区间模板:

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)


http://www.kler.cn/a/555669.html

相关文章:

  • 京东cfe滑块 分析
  • 跟着柳叶刀数字健康,学习如何通过病理切片预测分子分类对预后的影响|项目复现
  • 【深度学习】矩阵的理解与应用
  • 网络通信 之综合布线(Integrated Cabling for Network Communication)
  • 栈和队列-前K个高频元素
  • Windows 图形显示驱动开发-上下文监视
  • Leetcode 76 Minimum Window Substring
  • 鸿蒙NEXT开发-应用数据持久化之关系型数据库
  • Microsoft 365 Copilot中使用人数最多的是哪些应用
  • MariaDB 历史版本下载地址 —— 筑梦之路
  • Java多线程深度解析
  • QT项目——天气预报
  • 南凌科技接入deepseek大模型,提升云网智安服务能力
  • CE RED 增加网络安全 添加新网络安全类型
  • [Android]如何判断当前APP是Debug还是Release环境?
  • Java+SpringBoot+Vue+数据可视化的航班购票出行服务平台(程序+论文+讲解+安装+调试+售后)
  • RocketMQ - 常见问题
  • Unity Shader Graph 2D - Procedural程序化图形之夹心圆环
  • 网络设备的数据平面和控制平面
  • HtML之JavaScript BOM编程