Leetcode 154:尋找旋轉排序陣列中的最小值 II(最詳細的解法!!!)
阿新 • • 發佈:2018-12-19
假設按照升序排序的陣列在預先未知的某個點上進行了旋轉。
( 例如,陣列 [0,1,2,4,5,6,7]
可能變為 [4,5,6,7,0,1,2]
)。
請找出其中最小的元素。
注意陣列中可能存在重複的元素。
示例 1:
輸入: [1,3,5]
輸出: 1
示例 2:
輸入: [2,2,2,0,1]
輸出: 0
說明:
- 允許重複會影響演算法的時間複雜度嗎?會如何影響,為什麼?
解題思路
但是我們在處理最後一種情況時有所變化,不再是直接返回nums[low]
,因為我們會碰到這樣的情況
3 3 1 3
我們採用之前問題的第二種處理思路,也就是壓縮空間,那麼怎麼壓縮呢?我們知道對於第三種情況最小值可能出現在mid
的右側,也可能出現在low
或者恰好在mid
位置,所以對於這種情況我們直接high--
即可。
class Solution:
def findMin(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
low, high = 0, len(nums) - 1
while low <= high:
mid = (low + high) // 2
if nums[low] <= nums[mid]:
if nums[mid] <= nums[high]:
high -= 1
else:
low = mid + 1
else:
if nums[mid] <= nums[high]:
high = mid
return nums[low]
如有問題,希望大家指出!!!