35. 搜索插入位置(Python)

更多精彩内容,请关注【力扣简单题】

题目

难度:
类型:数组

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

你可以假设数组中无重复元素。

示例

示例 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

解答

这是一道典型的二分法问题。我们将整个数组看成一条线段,将这条线断从中间切开,查看线段中间位置所在的值和插入数之间的大小关系,根据此大小关系可以抛弃一半线段。

这里需要注意的有:

  1. 初始化,用两个端点下标left和right进行代表当前研究的线段,分别设置成数组两端数字下标;

  2. 控制条件,只要左端点不大于右端点,即可执行循环过程,这样做也可以解决输入数组仅有一个元素的情况;

  3. 最后跳出循环后返回值(插入target的位置)必须是左端点坐标,如果输入为空时,应该返回0,即不执行循环。

class Solution:
    def searchInsert(self, nums, target):
        left, right = 0, len(nums)-1            # 初始化左右端点位置
        while left <= right:                    # 当条件合法时
            mid = left + (right - left) // 2    # 获取中点,如果是偶数取靠左的位置
            if nums[mid] == target:             # 找到该数
                return mid                      # 直接返回
            elif nums[mid] > target:            # 如果当前位置数比插入值大
                right = mid - 1                 # 更新右端点
            else:                               # 如果当前位置数比插入值小
                left = mid + 1                  # 更新左端点
        return left                             # 返回插入位置,这里是左端位置

如有疑问或建议,欢迎评论区留言~

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。