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的数
  • 相关阅读:
    基于maven构建javaweb项目思路梳理及改进 在路上
    分圆多项式整理
    第03次作业栈和队列
    C语言第二次实验报告
    week01绪论作业
    第02次作业线性表
    C语言第一次实验报告
    工作流的问题
    无法使用Outlook 2003 Out Of Office Assisant
    刷机
  • 原文地址:https://www.cnblogs.com/season-peng/p/6713495.html
Copyright © 2011-2022 走看看