【leetcode算法-简单】35. 搜索插入位置
【题目描述】
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
你可以假设数组中无重复元素。
示例 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
【解答】
- 解法一:遍历
class Solution: def searchInsert(self, nums: List[int], target: int) -> int: if target in nums: #如果target存在于nums中 return nums.index(target) elif target < nums[0]: #如果target比数组第一个元素小 return 0 elif target > nums[-1]: #如果target比数组最后一个元素大 return len(nums) else: for i in range(len(nums)-1): if nums[i] < target and nums[i+1] > target: return i+1
执行用时:54ms
- 解法二:二分法
class Solution: def searchInsert(self, nums: List[int], target: int) -> int: size=len(nums) #特判1 if size==0: return 0 #特判2:如果target大于最后一个元素 if nums[-1]<target: return size left=0 right=size-1 #二分法逻辑判断 while left<right: mid=left+(right-left)//2 #mid=(left+right)//2 但是(left+right)可能会整型溢出,故换一种写法 if nums[mid]<target: left=mid+1 else: assert nums[mid] >= target right=mid return left
执行用时:86ms
Xxx

浙公网安备 33010602011771号