1、题目描述:
2、题解:
方法1:暴力法
遍历:判断,如果target == nums[i] or target < nums[i],直接返回此时的i。
class Solution:
def searchInsert(self, nums: List[int], target: int) -> int:
#暴力法
for i in range(len(nums)):
if target == nums[i] or target < nums[i]:
return i
return len(nums)
方法2:二分查找
模板请参考之前的文章:算法思想 从0到1:分治法——二分查找模板小结
注意处理一些细节:
class Solution:
def searchInsert(self, nums: List[int], target: int) -> int:
# 二分查找
left, right = 0, len(nums) - 1
while left <= right:
mid = left + (right - left) // 2
if nums[mid] == target:
return mid
elif nums[mid] > target:
right = mid - 1
else:
left = mid + 1
return right
或者:
class Solution:
def searchInsert(self, nums: List[int], target: int) -> int:
# 二分查找
left, right = 0, len(nums) - 1
while left <= right:
mid = left + (right - left) // 2
if nums[mid] == target:#别返回,找左侧边界
right = mid - 1
elif nums[mid] > target:
right = mid - 1
else:
left = mid + 1
return left
3、复杂度分析:
方法1:
时间复杂度:O(N)
空间复杂度:O(1)
方法2:
时间复杂度:O(logN)
空间复杂度:O(1)