35. 搜索插入位置

127 阅读1分钟

35. 搜索插入位置

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

题目描述

给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。

请必须使用时间复杂度为 O(log n) 的算法。
示例 1:

输入: nums = [1,3,5,6], target = 5
输出: 2

具体题目链接: 题目链接

思路:

题目要我们返回第 一 个 大于等于≥ 目标元素 2 的下标

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

分析:

细节:「查找第 1 次出现的位置」和「查找第一个大于等于 target 的元素的位置」这样的问题,如果根据 target 位置的值,把待搜索区间分成 2个部分,满足性质的的答案一定在其中某一个区间里

代码:

var searchInsert = function(nums, target) {
    if(!nums.length)return 0;//边界条件的判断

    let left = 0;
    let right = nums.length;

    while(left<right) {
        let mid = left + ((right-left) >>1);

        if(nums[mid] >= target) {//当target值在mid的左边的时候
            right = mid;//只提取左边区间
        } else {
            left = mid+1;//mid<target的时候 mid取不到,所以从mid+1开始
        }
    }
    return left;
};

总结:

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