搜索插入位置
题目描述:
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
你可以假设数组中无重复元素。
示例1
输入: [1,3,5,6], 5
输出: 2
示例2
输入: [1,3,5,6], 2
输出: 1
示例3
输入: [1,3,5,6], 0
输出: 0
解题思路:
题目整体比较简单,
in
判断符号解决了大多数的问题
但是同样可以使用利用二分查找法来解决问题
-
解法一就是利用
in
判断target
是否在数组中,然后通过遍历来找到在数组中的位置,返回下标即可,比较简单且粗暴的方法 -
解法二就是利用二分查找法,找到
target
的位置,如果没有找到,就返回数组的前一个数字比target
小,后一个数字比target
大的位置,如果是数组的头和尾则需要特殊处理
Python源码:
解法一
class Solution:
def searchInsert(self, nums: 'List[int]', target: 'int') -> 'int':
if target in nums:
return nums.index(target)
else:
count = 0
for i in nums:
if i > target:
return count
count += 1
return len(nums)
解法二
class Solution(object):
def searchInsert(self, nums: 'List[int]', target: 'int') -> 'int':
length = len(nums)
start = 0
end = length
while start < end:
mid = (start + end) // 2
if nums[mid] == target or (nums[mid] > target
and (mid == 0 or nums[mid - 1] < target)):
return mid
if mid == length - 1 and nums[mid] < target:
return mid + 1
if nums[mid] < target:
start = mid + 1
else:
end = mid
欢迎关注我的github:https://github.com/UESTCYangHR