①这题首先想到可以用这个旋转数组的特点,如果旋转了,最小的数字前面的那个肯定大于它,则直接输出。如果不是旋转数组,那么直接输出数组的第一个元素
class Solution:
def minArray(self, numbers: List[int]) -> int:
if not numbers:
return
i = len(numbers) - 1
while i > 0:
pre = numbers[i - 1]
back = numbers[i]
if pre > back:
return back
i = i - 1
return numbers[0]
#执行用时:24 ms, 在所有 Python3 提交中击败了98.26%的用户
#内存消耗:15.2 MB, 在所有 Python3 提交中击败了16.82%的用户
---------看题解:
②使用二分法:对于这种已经排好序的大多可以使用二分法:
class Solution:
def minArray(self, numbers: List[int]) -> int:
i = 0
j = len(numbers) - 1
while i < j:
mid = (i + j) // 2
if numbers[mid] > numbers[j]: i = mid + 1
elif numbers[mid] < numbers[j]: j = mid
else:
j -= 1
return numbers[i]