力扣035 搜索插入位置
题干
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
你可以假设数组中无重复元素。
示例
输入: [1,3,5,6], 5
输出: 2
输入: [1,3,5,6], 2
输出: 1
输入: [1,3,5,6], 7
输出: 4
输入: [1,3,5,6], 0
输出: 0
解析
本题的标签中有一个二分查找,但是我现在还不想思考二分查找的方法,感觉脑子不够用了,所以就用O(N)的方法吧,二分查找可以达到O(logN)。
下面讲思路,我们遍历数组,与target作比较,只可能出现三种可能:
1、nums[i] = target,直接找到目标元素,return i
2、nums[i] > target,由于数组是排序数组,因此 i 以后也不可能出现等于target的元素,此时的 i 即是我们需要插入的位置,return i
3、nums[i] < target,还未找到目标元素,需要继续遍历
第1种和第2种情况可以合并在一起写,只要想清楚这三种方法,本题就不怎么难。
代码
class Solution:
def searchInsert(self, nums: List[int], target: int) -> int:
for i in range(len(nums)):
if nums[i] >= target:
return i
return len(nums)
值得注意的是,多次提交这段代码,是有可能beat 90+%的,但是大多数情况下是60+%左右,说明效率肯定还是不如二分查找的。