Search Insert Position
给定一个有序的无重复元素的序列,和一个目标元素,求出该元素在数组中的下标,若数组中不存在该元素,则返回其在数组中的顺序下标。
Description
解题思路:
直接采用暴力查询。首先判断目标元素是否在数组中,若存在,则直接返回下标。
若不存在,将目标元素与数组中的最大最小值比较;如果介于最大最小值之间,则与数组中的任意两个相邻元素进行比较。
def searchInsert(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: int
"""
if target in nums:
return nums.index(target)
if target<min(nums):
return 0
elif target>max(nums):
return len(nums)
else:
for i in range(len(nums)):
if nums[i]<target and nums[i+1]>target:
return i+1
改进:
采用二分查找的思路,leetcode上提供的另一种解法。
def searchInsert(self, nums, key):
if key > nums[len(nums) - 1]:
return len(nums)
if key < nums[0]:
return 0
l, r = 0, len(nums) - 1
while l <= r:
m = (l + r)/2
if nums[m] > key:
r = m - 1
if r >= 0:
if nums[r] < key:
return r + 1
else:
return 0
elif nums[m] < key:
l = m + 1
if l < len(nums):
if nums[l] > key:
return l
else:
return len(nums)
else:
return m