Leetcode 35.搜索插入位置(Search Insert Position)

放肆的年华 提交于 2020-02-25 22:00:21

Leetcode 35.搜索插入位置

1 题目描述(Leetcode题目链接

  给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。你可以假设数组中无重复元素。

输入: [1,3,5,6], 5
输出: 2

输入: [1,3,5,6], 2
输出: 1

输入: [1,3,5,6], 7
输出: 4

输入: [1,3,5,6], 0
输出: 0

2 题解

  二分法查找正确位置,关键在于边界的处理,循环限制条件最好为left<rightleft<right,这样会确保在退出循环的时候left=rightleft = right,避免了要思考到底是返回哪个值。于此题,由于要插入正确位置,那么应该将数组的长度加一来看待,规定右边界的值为数组长度,左边界值为0,接下来要判断二分过程中midmid与左右边界值的关系:如果target>nums[mid]target>nums[mid]说明,目标位置一定在midmid右侧,应该left=mid+1left = mid + 1,反之,如果targetnums[mid]target \le nums[mid],则目标位置可能在midmid处,也可能在midmid左侧,应该right=midright = mid

class Solution:
    def searchInsert(self, nums: List[int], target: int) -> int:
        if not nums:
            return 0
        i, j = 0, len(nums)
        while i < j:
            mid = (i + j)//2
            if target > nums[mid]:
                i = mid + 1
            else:
                j = mid
        return i
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!