LeetCode 搜索插入位置

77 阅读1分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第1天,点击查看活动详情

一、题目描述:

35. 搜索插入位置 - 力扣(LeetCode) (leetcode-cn.com)

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

请必须使用时间复杂度为 O(logn)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

示例 4:

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

示例 5:

输入: nums = [1], target = 0
输出: 0

提示:

  • 1 <= nums.length <= 10^4
  • -10^4 <= nums[i] <= 10^4
  • nums 为无重复元素的升序排列数组
  • -10^4 <= target <= 10^4

二、思路分析:

这道题本来觉得一次能过的,没想到踩了几个坑,这里记录下这几个坑:

首先,题目的要求,只要找到相等的,就返回此处的索引,这里没问题

然后,如果没有相等的值,就插入到数组中排序的位置。

这里的第一个点,是 index的初始值为len(nums), 因为如果for循环没进入到两个if逻辑,

就返回len(nums), 一种是空数组,一种是数组的所有值都比target小,才会出现这种情况。

然后最重要的,if item > target 这一步判断的时候,一定要记得break

三、AC 代码:


func searchInsert(nums []int, target int) int {
    index := len(nums)
    for k, item := range nums {
        if item == target {
            return k
        }
        if item > target{
            index = k 
            break
        }
    }
    return index
}

范文参考:

已经有点熟练二分法,诶看到这题,哎呀这么简单我就玩二,也能做出这题。然后我提交哎呀,报错x4,,,才发现返回按顺序插入的位置这句话 - 搜索插入位置 - 力扣(LeetCode)

35. 搜索插入位置,二分法,边界 - 搜索插入位置 - 力扣(LeetCode)