Keep

二分查找模版

更新:
// 模版三「一般」情形 2: 大于
class Solution {
    public int search(int[] nums, int target) {
        int l = -1, r = nums.length;
        while(l + 1 < r){
            int c = l + (r - l) / 2;
            if(nums[c] <= target) l = c; // #1 更新后 l 及其左侧元素「必」小于等于 target
            else r = c; // #2 更新后 r 及其右侧「必」大于 target
        }
        return r == nums.length ? -1 : r; // 处理:相等/刚好大于/不存在
    }
}
// 模版三「一般」情形 1: 大于等于
class Solution {
    public int search(int[] nums, int target) {
        int l = -1, r = nums.length;
        while(l + 1 < r){
            int c = l + (r - l) / 2;
            if(nums[c] < target) l = c; // #1 更新后 l 及其左侧元素「必」小于 target
            else r = c; // #2 更新后 r 及其右侧「必」大于等于 target
        }
        // return (r == nums.length || nums[r] != target) ? -1 : r; // 704 题的返回,处理:相等/不等
        return r == nums.length ? -1 : r; // 处理:相等/刚好大于/不存在
    }
}
// 模版三「相等返回」写法
class Solution {
    public int search(int[] nums, int target) {
        int l = -1, r = nums.length;
        while(l + 1 < r){
            int c = l + (r - l) / 2;
            if(nums[c] == target) return c; // 找到目标值直接返回
            else if(nums[c] < target) l = c; // #1 更新后 l 及其左侧元素「必」小于 target
            else r = c; // nums[c] > target #2 更新后 r 及其右侧「必」大于 target
        }
        return -1;
    }
}
// 模版三「一般」情形 3: 小于等于
class Solution {
    public int search(int[] nums, int target) {
        int l = -1, r = nums.length;``
        while(l + 1 < r){
            int c = l + (r - l) / 2;
            if(nums[c] <= target) l = c; // #1 更新后 l 及其左侧元素「必」小于等于 target
            else r = c; // #2 更新后 r 及其右侧「必」大于 target
        }
        // return (l == -1 || nums[l] != target) ? -1 : l; // 704 题的返回,处理:相等/不等
        return l;
    }
}
// 模版三「一般」情形 4: 小于
class Solution {
    public int search(int[] nums, int target) {
        int l = -1, r = nums.length;
        while(l + 1 < r){
            int c = l + (r - l) / 2;
            if(nums[c] < target) l = c; // #1 更新后 l 及其左侧元素「必」小于 target
            else r = c; // #2 更新后 r 及其右侧「必」大于等于 target
        }
        return l;
    }
}

avatar image

@read2025, 生活在北京(北漂),程序员,宅,马拉松[纯粹],喜欢动漫。"骑士总能救出公主,是因为恶龙从没伤害过她"