35搜索插入位置
题目描述
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
你可以假设数组中无重复元素。
示例
输入: [1,3,5,6], 5
输出: 2
思路
二分查找的应用
代码
class Solution:
def searchInsert(self, nums: List[int], target: int) -> int:
def judge(index, nums, target):
if nums[index] == target:
return True,index
if nums[index] > target and (index == 0 or nums[index-1] < target):
return True,index
if nums[index] < target and (index == len(nums)-1 or target < nums[index + 1]):
return True, index + 1
##print(nums[index],nums[index+1],target)
return False,0
l = 0
r = len(nums) - 1
mid = 0
while l <= r:
##print(l,mid,r)
judge_l = judge(l, nums, target)
if judge_l[0]:
return judge_l[1]
judge_r = judge(r, nums, target)
if judge_r[0]:
return judge_r[1]
mid = (l + r) // 2
judge_mid = judge(mid, nums, target)
if judge_mid[0]:
return judge_mid[1]
if nums[mid] > target:
r = mid - 1
else:
l = mid + 1
执行结果
执行用时:
36 ms, 在所有 Python3 提交中击败了84.90%的用户
内存消耗:
15.2 MB, 在所有 Python3 提交中击败了78.07%的用户
题目来源
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/search-insert-position
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。