题目
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.
Example 1:
Input: [1,3,5,6], 5
Output: 2
Example 2:
Input: [1,3,5,6], 2
Output: 1
Example 3:
Input: [1,3,5,6], 7
Output: 4
Example 4:
Input: [1,3,5,6], 0
Output: 0
直接查找
如果目标值存在数组中则直接返回下标。
如果不存在,则遍历数组,第一个大于目标值的元素下标就是结果,还有一种情况是数组中元素没有比目标值更大的,则需要插入元素到数组末尾。
class Solution(object):
def searchInsert(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: int
"""
if target in nums:
return nums.index(target)
else:
for i in range(len(nums)):
if target<nums[i]:
return i
elif i == len(nums)-1:
return len(nums)
二分查找
一般有序数组都可尝试二分法。
class Solution(object):
def searchInsert(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: int
"""
l = 0
r = len(nums)-1
while l<=r:
mid = (l+r)/2
if nums[mid]>=target:
r = mid-1
else:
l = mid+1
return l