二分专题:704. 二分查找

122 阅读1分钟

704. 二分查找

Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情

题目描述

给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target  ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。

具体题目链接: 题目链接

思路:

二分查找的最原始问题

分析:

1.思路:二分题目的思路:

确定二分边界(重点!!)
编写二分的代码框架(2个模版之一)
设计一个check(性质)
判断一下区间如何更新
如果更新方式写的是l=mid,r=mid-1,那么就在算mid的时候加上1

每次比较的是中点(用于缩小范围mid)与临界点(目标值target)(判断是哪一侧区间) 注意:每一次的check比较的都是mid与临界点target的大小,即mid ? target

如果mid>target说明target在mid的左边,r=mid

如果mid<target说明target在mid的右边,l=mid

代码:

版本一

var search = function(nums, target) {
    if(!nums)return -1;
    let left = 0;
    let right = nums.length - 1;

    while(left < right) {
        let mid = left + right >>1;
        if(nums[mid]>=target) {
            right = mid;
        } else {
            left = mid+1;
        }
    }
    if(nums[left]==target) return left;//如果找到目标值,返回left
    return -1;//没找到目标返回-1;
};

版本二

var search = function(nums, target) {
    if(!nums)return -1;
    let left = 0;
    let right = nums.length - 1;

    while(left < right) {
        let mid = left + right >>1;
        if(nums[mid]>=target) {
            right = mid;
        } else if(nums[mid]==target) {
            return mid;
        } else {
            left = mid+1;
        }
    }
    if(nums[left]==target) return left;//如果找到目标值,返回left
    return -1;//没找到目标返回-1;
};

总结:

这是算法系类文章「二分专题」的相关题解