leedcode 搜索插入位置

自己写的

class Solution:
    def searchInsert(self, nums, target):
        nums_len = len(nums)
        if target>nums[nums_len-1]:
            return nums_len
        if target<nums[0]:
            return 0
        i = 0
        while i < nums_len:
            if nums[i] == target:
                return i
            else:
                i += 1

        j = 0
        while j < nums_len - 1:
            if nums[j] < target and nums[j + 1] > target:
                return j + 1
            else:
                j += 1

 

总体而言,该代码首先处理特殊情况,然后通过两个 while 循环的方式在有序列表中搜索目标值的插入位置。第一个循环通过递增索引 i 直到找到目标值或超过列表末尾。第二个循环通过递增索引 j 直到找到两个相邻元素满足条件,然后返回插入位置。然而,这个实现的时间复杂度较高,可以通过二分查找等更高效的方法来改进。

 

gpt的二分查找

 

在Python中,// 是整除运算符,用于执行整数除法并返回结果的整数部分

class Solution:
    def searchInsert(self, nums, target):
        # 初始化左右边界
        left, right = 0, len(nums) - 1
        print('初始',left,right)

        # 使用二分查找
        while left <= right:
            # 计算中间索引
            mid = left + (right - left) // 2
            print('mid:', mid)

            # 如果中间元素等于目标值,直接返回中间索引
            if nums[mid] == target:
                return mid
            elif nums[mid] < target:
                # 如果中间元素小于目标值,在右半部分继续查找
                left = mid + 1
                print('left:', left)
            else:
                # 如果中间元素大于目标值,在左半部分继续查找
                right = mid - 1
                print('right:', right)

        # 如果循环结束仍未找到目标值,返回左边界,即插入位置
        return left

 

posted @ 2024-01-23 10:01  Junior_bond  阅读(7)  评论(0)    收藏  举报