LeetCode搜索插入位置使用JavaScript解题|前端学算法

380 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第6天,点击查看活动详情

有人相爱,有人夜里开车看海,我是leetcode第一题都做不出来

前几天做LeetCode算法题,我还说要打十个,今天就被LeetCode狠狠打脸了

算了,难度大的做不出来,咱还做不出来简单的嘛,今天咱们就捡软柿子捏,来找找自信

搜索插入位置

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

示例 1:

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

输出: 2

示例 2:

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

输出: 1

解题思路

审题,注意审题: 题目要求给有序数组,寻找该下标,如果不存在该元素,返回该元素应该插入的位置,那我们就是不是可以使用遍历查询?

但是又要求时间复杂度Olog(n),所以这题需要使用要二分查找;整体思路和普通的二分查找几乎没有区别,具体步骤内容需要修改一下

  • 第一步:老样子先设定左侧下标 left 和右侧下标 right,再计算中间下标 mid

  • 第二步:每次根据 nums[mid] 和 target 之间的大小进行判断,相等则直接返回下标,如果nums[mid] < target 则在 [mid+1,right]查找,如果nums[mid] > target 则 在[left,mid-1]查找

  • 循环进行第二步操作,直至查找结束,结束时如果还没有相等值则返回 left,且该值为插入位置

var searchInsert = function(nums, target) {
    let left = 0;
    let right = nums.length - 1;
    let mid = 0
    while (left <= right) {
        mid = Math.floor((right - left)/2 + left);
        if (nums[mid] === target) {
            return mid;
        } else if (nums[mid] < target) {
            left = mid + 1;
        } else {
            right = mid - 1;
        }
    }
    return left;
}

image.png

信心找回来了,我还要打十个