35、搜索插入位置--leetcode

it2022-05-05  119

给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 你可以假设数组中无重复的元素。 实例1:

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

实例2:

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

实例3:

输入:[1,3,5,6], 7 输出:4

实例4:

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

算法设计与分析: 使用二分查找方法 1、初始化左右指针 2、注意边界值,如果right = len(nums)的话,while的条件应该是left < right 3、mid的取值应该是左右两个值之和取平均值。 4、二分查找返回mid值就是查找到对应的值了,mid就对应下标值 5、如果不等,根据target的值,左右选取新的边界 6、重复2到5步骤,直至循环结束 7、返回的必须是left值,因为在退出while循环之后right < left 的,所以应该返回left值。当两个值相同的时候,本题的target的插入位置要求是左边位置 时间复杂度为:O(logn),二分定性 python3的代码实现如下

class Solution: def searchInsert(self, nums: List[int], target: int) -> int: left = 0 right = len(nums)-1 # 注意边界值,如果right = len(nums)的话,while的条件应该是left < right while left <= right: # 是相加! mid = (right + left)//2 if nums[mid] == target: return mid elif nums[mid] < target: # left! left = mid + 1 else: # right! right = mid - 1 return left

最新回复(0)