Leetcode刷题:35. 搜索插入位置
题目描述
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
请必须使用时间复杂度为 O(log n) 的算法。
nums 为 无重复元素 的 升序 排列数组
示例 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和示例2:
引用文本输入: nums = [1,3,5,6], target = 5
输出: 2
引用文本输入: nums = [1,3,5,6], target = 2
输出: 1
5在nums中可以直接输出它的index,2不在nums中,当num[i]>target时,此时i就是target所要插入的位置,直接输出i即可
def searchInsert(self, nums: List[int], target: int) -> int:
n=0
if target in nums:
return nums.index(target)
else:
while n<len(nums):
if nums[n]>target:
return n
break
else:
n+=1 #否则就继续往下遍历
再分析示例3:
引用文本输入: nums = [1,3,5,6], target = 7
输出: 4
我们目前的代码如果遍历到最后没有找到大于target的值则不会输出任何东西,所以是不完整的,此时如果在一开始考虑nums中的最大数比target小的话,那么target只能放在最后面。
def searchInsert(self, nums: List[int], target: int) -> int:
n=0
if target in nums:
return nums.index(target)
else:
if target>max(nums):
return len(nums)
else:
while n<len(nums):
if nums[n]>target:
return n
break
else:
n+=1