标签:lse 大于 排序 else 数值 style == describe ack
1.从题目看就是一个有序数组分成AB,旋转后变为BA,找出A的第一个数值。for循环O(n)可以直接查,或者直接返回min
2.数组的查找优先使用二分法查找,定义mid,
mid若是大于high,则说明min现在在B里,low往右变为mid+1,至少是mid加一,因为现在mid还在B里;
mid若是小于high,则说明mid现在就在A里了,high往左移变为mid,不用减一,万一就是min了呢
mid若是等于high,无法判断mid在哪里,(3 2 2 2)但因为是非递减排序,执行high--
不断缩小范围后,low为现在最小的元素
1.
class Solution: def minArray(self, numbers: List[int]) -> int: if len(numbers) == 0: return 0 # return min(numbers) for i in range(len(numbers)-1): if(numbers[i]>numbers[i+1]): return numbers[i+1] return numbers[0]
2.
class Solution: def minArray(self, numbers: List[int]) -> int: if len(numbers) == 0: return 0 i, j = 0, len(numbers) - 1 while i < j: m = (i + j) // 2 if numbers[m] > numbers[j]: i = m + 1 elif numbers[m] < numbers[j]: j = m else: j -= 1 return numbers[i]
标签:lse 大于 排序 else 数值 style == describe ack
原文地址:https://www.cnblogs.com/fuj905/p/12888476.html