这道题本来想先排序的,但时间复杂度不满足
卡了许久,求助评论区
代码如下:
class Solution:
def minNumberInRotateArray(self , rotateArray: List[int]) -> int:
n = len(rotateArray) - 1
low, high = 0, n
while low < high:
mid = (low + high) // 2
if rotateArray[mid] < rotateArray[low]:
high = mid
elif rotateArray[mid] > rotateArray[high]:
low = mid + 1
else:
high = high - 1
return rotateArray[low]
这个代码是顺序数组二分查找的变种,最小元素大部分情况在中间
当 rotateArray[mid] 元素小于 rotateArray[low] 时,最小元素在 mid 左侧,需要减小 high
当 rotateArray[mid] 元素大于 rotateArray[high] 时,最小元素在 mid 右侧,需要增大 low
其余情况令 high 依次减***近最小元素
好累啊,不想学了