给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
你可以假设数组中无重复元素。
示例 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:
if target in nums:
return nums.index(target)
for i in range(len(nums)):
if nums[i] > target:
return i
return len(nums)
执行用时:44 ms, 在所有 Python3 提交中击败了50.39%的用户
内存消耗:14.4 MB, 在所有 Python3 提交中击败了29.87%的用户
二分法
class Solution:
def searchInsert(self, nums: List[int], target: int) -> int:
if target in nums:
return nums.index(target)
n = len(nums)
left = 0
right = n - 1
while(left <= right):
mid = left + (right - left) // 2
if target <= nums[mid]:
right = mid - 1
else:
left = mid + 1
return left
执行用时:40 ms, 在所有 Python3 提交中击败了74.85%的用户
内存消耗:14.3 MB, 在所有 Python3 提交中击败了59.67%的用户
Pursue the ultimate
class Solution:
def searchInsert(self, nums: List[int], target: int) -> int:
if target in nums:
return nums.index(target)
n = len(nums)
left = 0
right = n - 1
while(left <= right):
mid = left + ((right - left) >> 2)
if target <= nums[mid]:
right = mid - 1
else:
left = mid + 1
return left
执行用时:36 ms, 在所有 Python3 提交中击败了91.08%的用户
内存消耗:13.9 MB, 在所有 Python3 提交中击败了99.32%的用户