给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
你可以假设数组中无重复元素。
示例 1:
输入: [1,3,5,6], 5
输出: 2
示例 2:
输入: [1,3,5,6], 2
输出: 1
示例 3:
输入: [1,3,5,6], 7
输出: 4
示例 4:
输入: [1,3,5,6], 0
输出: 0
解题思路
因为问题中已经告诉我们这是一个排好序的数组,而问题又恰恰是一个查找问题,所以我们很容易想到使用二分搜索法解决这个问题。实际上这是一个计算重复数组的lower_bound
的问题, 参考Leetcode 二分法问题总结(超详细!!!)中的lower_bound
写法即可。
class Solution:
def searchInsert(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: int
"""
l, r = 0, len(nums)-1
while l <= r:
mid = (r + l)//2
if target > nums[mid]:
l = mid + 1
else:
r = mid - 1
return l
我将该问题的其他语言版本添加到了我的GitHub Leetcode
如有问题,希望大家指出!!!