给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
你可以假设数组中无重复元素。
示例 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
给定一个无重复元素的排序数组,题目要求找到能插入target
的位置索引。
-
暴力搜索 :一种最为简单直观的方法,但是时间复杂度为 O ( n ) O(n) O(n)。
- 如果
target
在数组中存在,直接返回它在数组中的索引即可 - 如果它在数组中不存在,则找到第一个大于它的元素的索引
- 如果数组中元素皆小于
target
,则直接返回数组的长度
- 如果
class Solution:
def searchInsert(self, nums: List[int], target: int) -> int:
if nums == []: return None
if target in nums:
return nums.index(target)
if nums == []:
return None
for i in range(len(nums)):
if nums[i] > target:
return i
return len(nums)
-
二分查找:时间复杂度为 O ( log n ) O(\log n) O(logn):
- 如果元素位于数组中,则返回
mid
表示的索引 - 如果元素不在数组中,则返回
left
表示的索引
- 如果元素位于数组中,则返回
class Solution:
def searchInsert(self, nums: List[int], target: int) -> int:
if nums == []: return None
l = 0
r = len(nums) - 1
while l <= r:
mid = (l + r) // 2
if nums[mid] == target:
return mid
elif nums[mid] > target:
r = mid - 1
else:
l = mid + 1
return l