【力扣刷题记 35】——《搜索插入位置》

129 阅读1分钟

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

一、题目描述:

  1. 搜索插入位置 —— 难度简单

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

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

示例 1:

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

输出: 2

示例 2:

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

输出: 1

示例 3:

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

输出: 4  

提示:

1 <= nums.length <= 10^4

-10^4 <= nums[i] <= 10^4

nums 为 无重复元素 的 升序 排列数组

-10^4 <= target <= 10^4

二、题目和思路分析:

这道题是简单题,不过要求O(log n)的时间复杂度,其实也不是那么简单,还是有点难度的。

既然有时间复杂度的要求,并且是排序的数组,那么使用二分查找方法是再适合不过的。

二分查找取数组中间值与目标值对比,如果相等则直接返回档期啊中间值下标,如果小于或大于目标值,则将数组范围缩小一半,继续查找,知道目标范围为1或者找到目标值。

三、代码:

代码实现如下:

/**
 * @param {number[]} nums
 * @param {number} target
 * @return {number}
 */
var searchInsert = function(nums, target) {
    let i = 0
    let j = nums.length - 1

    while(i <= j) {
        let mid = i + ((j - i) >> 1)
        if (nums[mid] === target) {
            return mid
        } else if (nums[mid] < target) {
            i = mid + 1
        } else if (nums[mid] > target) {
            j = mid - 1
        }
    }
    return i
};

四、总结:

这道题用来考察基本的二分查找还是很有意思的,确实是比较简单的一道题,题目写的也比较清晰,做起来也比较顺畅。

加油吧!

image.png