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

浙公网安备 33010602011771号