给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
你可以假设数组中无重复元素。
示例 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
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/search-insert-position
解答
解法1
def searchInsert(nums, target):
if target in nums:
return nums.index(target)
else:
nums.append(target)
nums = sorted(nums)
return nums.index(target)
解法2
用二分法实现。在排好序的列表里寻找位置就要想到二分法!
思路:
在列表头和列表尾设置两个指针,指针在列表移动。
从列表中间值开始匹配target。
如果target小于中间值,则将右指针向左移到中间值左边;
如果target大于中间值,则将左指针向右移到中间值右边。然后再寻找中间值。
判断条件:右指针索引小于左指针停止
最后返回左指针的索引。(插入新数值的位置)
def searchInsert(nums, target):
left = 0
right = len(nums - 1)
while left <= right:
mid = left + (right - left) // 2
if nums[mid] == target:
return mid
elif target < nums[mid]:
right = mid - 1
else:
left = mid +1
return left