给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
你可以假设数组中无重复元素。
示例 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
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/search-insert-position
class Solution:
def searchInsert(self, nums: List[int], target: int) -> int:
n_len = len(nums)
left, right = 0, n_len-1
while left < right:
mid = (left+right) >> 1 #左中位数
if nums[mid] < target:
left = mid+1 # 因为是左中位数所以左边要动不然容易死循环
elif nums[mid] > target:
right = mid
else:
return mid
if nums[left]>=target:
return left
else:
return left+1
二分法模板:左中位数模板
def erfen(nums,left,right):
n_len = len(nums)
left, right = 0, n_len-1
while left < right:
mid = (left+right) >> 1
if nums[mid] < target:
left = mid + 1
else:
right = mid
#这个时候循环出来是: left==right的
if nums[left]==target:
pass
elif ...
右中位数模板:
def erfen(nums,left,right):
n_len = len(nums)
left, right = 0, n_len-1
while left < right:
mid = (left+right+1) >> 1 #右中位数
if nums[mid] > target:
right = mid-1 #因为是右中位数,所有右边要动不然容易死循环
else:
left = mid
#这个时候循环出来是: left==right的
if nums[left]==target:
pass
elif ...
左中位数死循环案例 数组nums = [6,7] ; target = 7
left = 0 ; right = 1 mid = 0 nums[mid] = 6 6<7 往右找,如果此时left=mid也就是0,则永远在这个循环里。
所以左中位数,往右找时,left = mid+1
右中位数死循环案例 数组nums = [6,7] ; target = 6
left = 0 ; right = 1 mid = 1 nums[mid] = 7 7>6 往左找,如果此时right=mid也就是1,则永远在这个循环里。
所以右中位数,往左找时,right = mid-1