leetcode 35.搜索插入位置(python版)

需求

给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
请必须使用时间复杂度为 O(log n) 的算法。
示例 1:
输入: nums = [1,3,5,6], target = 5
输出: 2
示例 2:
输入: nums = [1,3,5,6], target = 2
输出: 1
示例 3:
输入: nums = [1,3,5,6], target = 7
输出: 4

分析

可以使用二分查找算法来在排序数组中查找目标值。二分查找算法的时间复杂度为 O(log n)。
具体步骤如下:
初始化左指针为 0,右指针为数组长度减 1。
在 while 循环中,当左指针小于等于右指针时执行以下操作:
a. 计算中间指针 mid = (左指针 + 右指针) / 2。
b. 如果目标值等于中间指针指向的值,则返回中间指针。
c. 如果目标值小于中间指针指向的值,则将右指针设置为 mid - 1。
d. 如果目标值大于中间指针指向的值,则将左指针设置为 mid + 1。
如果循环结束后仍未找到目标值,说明目标值不存在于数组中。此时可以根据左指针的值来确定插入位置。
如果目标值小于左指针指向的值,则插入位置为左指针,否则插入位置为左指针加 1。

代码

class Solution:
    def search_insert(self,nums,target):
        left = 0
        right = len(nums) - 1

        while left <= right:
            mid = (left + right) // 2

            if nums[mid] == target:
                return mid
            elif nums[mid] < target:
                left = mid + 1
            else:
                right = mid - 1

        return left

if __name__ == '__main__':
    call=Solution()
    nums = [1,3,5,6]
    target = 3
    print(call.search_insert(nums, target))

运行结果

leetcode 35.搜索插入位置(python版)_第1张图片

你可能感兴趣的:(leetcode,python,算法)