Search Insert Position
Given a sorted array of distinct integers 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 must write an algorithm with O(log n)
runtime complexity.
Example 1:
Input: nums = [1,3,5,6], target = 5
Output: 2
Example 2:
Input: nums = [1,3,5,6], target = 2
Output: 1
Example 3:
Input: nums = [1,3,5,6], target = 7
Output: 4
思路:二分插入排序,在[first,last]区间里找到mid = (first + last)//2 ,如果target > nums[mid],在[mid+1,last]区间中查找(mid+1为新first),如果target <= nums[mid],在[first,mid]区间中查找(mid为新last)。
class Solution(object):
def searchInsert(nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: int
"""
nums.append(float('inf'))#如果插入到list尾部
first = 0#list的初始脚标
last = len(nums)-1#list尾部脚标
while first < last:
mid = (first + last) // 2#获得first与last的中心索引(两个数相除,结果为向下取整的整数)
if target <= nums[mid]:#如果target<=中心索引对应值
last = mid#在[first,mid]区间里进行下次查找
else:
first = mid + 1#在[mid+1,last]区间里进行下次查找
return first#当first等于last时,first为当前插入位置
if __name__ == "__main__":
nums = [1, 3, 5, 6]
target = 7
a = Solution.searchInsert(nums,target)
print(a)