题目:查询插入位置
Given a sorted array and a target value, return the index if the target is found. If not, return the index where it would be if it were inserted in order.
You may assume no duplicates in the array.
题意:
给定一个有序数组&一个值。如果这个值存在于数组中,返回它的索引,否则返回它应该插入的位置。假设这个数组无重复。
Here are few examples.
[1,3,5,6], 5 → 2
[1,3,5,6], 2 → 1
[1,3,5,6], 7 → 4
[1,3,5,6], 0 → 0
方法一:性能56ms
class Solution(object):
def searchInsert(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: int
"""
if len(nums) == 0:
return 0
for i in range(len(nums)):
if target < nums[i]:
nums.insert(0,target)
return 0
elif target == nums[i]:
return i
elif i < len(nums)-1 and target > nums[i] and target < nums[i+1]:
nums.insert(i+1, target)
return i+1
elif i == len(nums) - 1:
nums.append(target)
return len(nums) - 1
方法二:性能35ms
class Solution(object):
def searchInsert(self, nums, target):
n = len(nums)
if n == 0 or target <= nums[0]: return 0
if target > nums[n-1]: return n
left, right = 0, n-1
while left < right:
mid = (left+right)//2
if target == nums[mid]: return mid
if target > nums[mid]: left = mid+1
else: right = mid-1
if target > nums[left]: return left+1
else: return left
其中//
表示取整除法