把一個數組最開始的若干個元素搬到數組的末尾,我們稱之爲數組的旋轉。輸入一個遞增排序的數組的一個旋轉,輸出旋轉數組的最小元素。例如,數組 [3,4,5,1,2] 爲 [1,2,3,4,5] 的一個旋轉,該數組的最小值爲1。
示例 1:
輸入:[3,4,5,1,2]
輸出:1
示例 2:
輸入:[2,2,2,0,1]
輸出:0
考點: 半有序數組中找最小值
思路:
- 使用自帶的min函數
- 暴力遍歷找最小值
- 利用好旋轉數組的半有序,使用二分查找法,左邊有序,右邊有序,中間一點是最小值。中間值與最後一個值比較,如果中間值大於最後一個值,表明中間值在前一段有序中,需要將left進行移動,left變爲mid+1。如果中間值小於最後一個值,表明中間值在後面一段有序中,需要將right進行移動,right變爲mid。如果中間值等於最後一個值,則將right左移動一位。最終返回nums[left]
class Solution:
def minArray(self, numbers: List[int]) -> int:
if numbers is None or len(numbers) < 1:
return None
# 使用自帶的函數
'''
return min(numbers)
'''
# 暴力法,挨個比較, 沒有用到旋轉數組排序的信息
'''
min_val = numbers[0]
for num in numbers[1:]:
if num < min_val:
min_val = num
return min_val
'''
# 二分查找
left = 0
right = len(numbers) - 1
while left < right:
mid = left + (right - left) // 2
if numbers[mid] > numbers[right]:
left = mid + 1
elif numbers[mid] < numbers[right]:
right = mid
else:
right -= 1
return numbers[left]
鏈接:https://leetcode-cn.com/problems/xuan-zhuan-shu-zu-de-zui-xiao-shu-zi-lcof