搜索插入位置|刷题打卡

154 阅读1分钟

一、题目描述:

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

你可以假设数组中无重复元素。

示例 1:

输入: [1,3,5,6], 5

输出: 2

示例 2:

输入: [1,3,5,6], 2

输出: 1

二、思路分析

边界 如果nums[0] 小于目标值,则目标值放在数组最前面,返回0

如果nums[nums.length - 1] 大于目标值,则目标值放在数组最后,即返回nums.length

数组循环 (1) 如果没有目标值,就寻找目标值两侧数字 i 和 i+1

(2) 若数组中有相同值,直接返回 i

第二种是二分法 这个不太懂

三、AC 代码:

1.循环查找,暴力

var searchInsert = function(nums, target) {
    if(nums[0] > target) return 0
    if(nums[nums.length - 1] < target) return nums.length
    for(let i = 0; i < nums.length; i++) {
        if(nums[i] < target && nums[i + 1] > target) {
            return i + 1
        }
        if(nums[i] === target) {
            return i
        }
    }
};

2.二分法

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

四、总结:

暴力解法,简单好像,我需要研究一下二分法,虽然懂什么意思,但是写不出来

本文正在参与「掘金 2021 春招闯关活动」, 点击查看活动详情