二分查找个人总结,记住这个方法所有二分查找基本秒杀

二分查找个人总结,记住这个方法所有二分查找基本秒杀

查找单个元素

特别需要注意三种情况的等号的取值

int binarySearch(int[] nums, int target) {
    int left = 0; 
    int right = nums.length - 1; // 注意

    while(left <= right) {
        int mid = (right + left) / 2;
        if(nums[mid] == target)
            return mid; 
        else if (nums[mid] < target)
            left = mid + 1; // 注意
        else if (nums[mid] > target)
            right = mid - 1; // 注意
        }
    return -1;
}

查找左侧边界

关键点在于找到 target 时不要立即返回,而是缩小「搜索区间」的上界 right,在区间 [left, mid) 中继续搜索,即不断向左收缩,达到锁定左侧边界的目的。

int left_bound(int[] nums, int target) {
    if (nums.length == 0) return -1;
    int left = 0;
    int right = nums.length; // 注意

    while (left < right) { // 注意
        int mid = (left + right) / 2;
        if (nums[mid] == target) {
            right = mid;
        } else if (nums[mid] < target) {
            left = mid + 1;
        } else if (nums[mid] > target) {
            right = mid; // 注意
        }
    }
    return left;
}

查找右侧边界

int right_bound(int[] nums, int target) {
    if (nums.length == 0) return -1;
    int left = 0, right = nums.length;//注意

    while (left < right) {
        int mid = (left + right) / 2;
        if (nums[mid] == target) {
            left = mid + 1; // 注意
        } else if (nums[mid] < target) {
            left = mid + 1;
        } else if (nums[mid] > target) {
            right = mid;
        }
    }
    return left - 1; // 注意
}
全部评论

相关推荐

华夫大饼:鹰厂的这个行政岗还是可以的,算是个很不错的央国企了,福利什么的都是拉满的,而且没有35岁危机,不会因为年纪大裁你。缺点也很明显,央国企里的***懂得都懂。每4年才招收一次,而且hc比较少,好像就1个,争取好好干,4年后争取续签一次
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务