ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

元宝 LeetCode 153. 寻找旋转排序数组中的最小值 Python3实现

元宝    LeetCode 153. 寻找旋转排序数组中的最小值 Python3实现 下面是 LeetCode 153寻找旋转排序数组中的最小值 的 Python3 实现逻辑与 Java 版本完全一致采用二分查找Python3 代码实现from typing import Listclass Solution:def findMin(self, nums: List[int]) - int:“”寻找旋转排序数组中的最小值:param nums: 旋转排序数组无重复元素:return: 数组中的最小值“”if not nums:raise ValueError(“数组不能为空”)left, right 0, len(nums) - 1 while left right: mid left (right - left) // 2 # 防止溢出等价于 (left right) // 2 # 如果中间值大于右侧值说明最小值在右半部分 if nums[mid] nums[right]: left mid 1 else: # 否则最小值在左半部分包括 mid 自身 right mid # 循环结束时 left right即为最小值索引 return nums[left]使用示例ifname “main”:sol Solution()# 示例 1 nums1 [3, 4, 5, 1, 2] print(sol.findMin(nums1)) # 输出: 1 # 示例 2 nums2 [4, 5, 6, 7, 0, 1, 2] print(sol.findMin(nums2)) # 输出: 0 # 示例 3未旋转 nums3 [1, 2, 3, 4, 5] print(sol.findMin(nums3)) # 输出: 1复杂度分析时间复杂度O(log n) —— 每次将查找范围缩小一半。空间复杂度O(1) —— 只使用常数级别的额外变量。核心要点判断条件“nums[mid] nums[right]” 时最小值在右侧否则在左侧包含“mid”。循环结束条件“left right”此时指向的就是旋转点最小值。为什么不用“nums[left]” 比较因为旋转数组的特性“nums[right]” 能更稳定地判断“mid” 所在的递增区间。如果你还需要 LeetCode 154含重复元素的 Python3 版本或者想了解 迭代/递归写法对比可以继续问我
返回列表