zoukankan      html  css  js  c++  java
  • 二分搜索

    //非递减数列,[left, right] 闭区间,最后left一定会等于right
    while(left < right) {//区间只剩1个元素时终止,此时left=right
        int mid = left + ((right - left) >> 1);//防止溢出,没有+1,mid偏左
        if(target > nums[mid]) {
            left = mid + 1;//因为mid已经偏左,left+1可防止死循环
        }
        else {//包含“相等”的条件在里面,不单独列出“相等”是因为比较操作会耗时,二分搜索(而不是三分四分)只需一个比较操作
            right = mid;
        }
    }
    //nums[right] >= target,right是第一个大于等于target的数
    //非递减数列,[left, right] 闭区间,最后left一定会等于right
    while(left < right) {//区间只剩1个元素时终止,此时left=right
        int mid = left + ((right - left + 1) >> 1);//防止溢出,存在+1,mid偏右
        if(target < nums[mid]) {
            right = mid - 1;//因为mid已经偏右,right-1可防止死循环
        }
        else {//包含“相等”的条件在里面,不单独列出“相等”是因为比较操作会耗时,二分搜索(而不是三分四分)只需一个比较操作
            left = mid;
        }
    }
    //nums[left] <= target,left是最后一个小于等于target的数
  • 相关阅读:
    Linux -- 查看是否安装了指定的包
    linux -- 部署java服务器(1) linux安装jdk
    spring boot -- 接收文件接口
    vue3 --相对于vue2的改变T1档次
    243交换输出
    24416进制的简单运算
    7街区最短路径问题
    206矩形的个数
    33蛇形填数
    273字母小游戏
  • 原文地址:https://www.cnblogs.com/season-peng/p/6713495.html
Copyright © 2011-2022 走看看