搜索插入位置
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
请必须使用时间复杂度为 O(log n) 的算法。
示例 1:
输入: nums = [1,3,5,6], target = 5
输出: 2
示例 2:
输入: nums = [1,3,5,6], target = 2
输出: 1
示例 3:
输入: nums = [1,3,5,6], target = 7
输出: 4
题目给的是排序数组,这里首先想到用二分查找,
我这里选用了二分查找,减少了时间复杂度,但是返回插入的位置又有讲究,需要理解返回的位置,例如有数据相等,target == nums[mid]
或者target小于全部数组元素,或大于全部元素。
这是先查找再分情况确定插入位置的方法
class Solution(object):
def searchInsert(self, nums, target):
head = 0
low = len(nums) - 1
while (head < low):
mid = (head + low) // 2
if nums[mid] == target:
return mid
if nums[mid] < target:
head = mid + 1
elif nums[mid] > target:
low = mid - 1
if low < 0:
return mid
if nums[low] >= target:
return low
elif nums[low] < target:
return low+1
这是排除两种头部和尾部的情况的方法
class Solution(object):
def searchInsert(self, nums, target):
head = 0
low = len(nums) - 1
if nums[head] > target:
return head
elif nums[low] < target:
return low+1
else:
while (head < low):
mid = (head + low) // 2
if nums[mid] == target:
return mid
if nums[mid] < target:
head = mid + 1
elif nums[mid] > target:
low = mid - 1
if nums[low] >= target:
return low
elif nums[low] < target:
return low+1
a = Solution()
print(a.searchInsert([1,3,5,6],5))
print(a.searchInsert([1,3,5,6],2))
print(a.searchInsert([1,3,5,6],7))
print(a.searchInsert([1,3],0))
运行结果如下:
本人大二目前正在努力刷题和学习,如果有问题请大佬指正。写博客纯属为记录自己的学习,加深印象。也为了督促自己学习。谢谢大家!