题目链接:力扣
题目:
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
请必须使用时间复杂度为 O(log n) 的算法。
示例 1:
示例 2:
示例 3:
提示:
解答:
【二分法查找——非递归】
1、设置两个游标来记录每次二分的开始索引 left 和结束索引 right
2、循环求中间位置的值,并将这个值与目标target进行比较,相等则返回,否则更新索引的值并进入下一次循环
3、最后判断首位是否大于或等于,若是则插入首位,返回0;反之,直接返回left
完整代码如下:
class Solution:
def searchInsert(self, nums: List[int], target: int) -> int:
left,right=1,len(nums)-1
while left<=right:
mid_index = (left+right)//2
if nums[mid_index]==target:
return mid_index
elif nums[mid_index]>target:
right = mid_index - 1
else:
left = mid_index + 1
if nums[0]>=target:
return 0
return left
提交结果: