原題
假設(shè)一個(gè)旋轉(zhuǎn)排序的數(shù)組其起始位置是未知的(比如0 1 2 4 5 6 7 可能變成是4 5 6 7 0 1 2)。
你需要找到其中最小的元素。
你可以假設(shè)數(shù)組中不存在重復(fù)的元素。
給出[4,5,6,7,0,1,2] 返回 0
解題思路
- 如果極端情況數(shù)組旋轉(zhuǎn)了0次,即仍未升序數(shù)組,我們可以通過
if nums[mid] < nums[end]:
end = mid
使得最后start = 0,end = 1,返回min(A[start], A[end])
- 對(duì)于旋轉(zhuǎn)的情況,有可能出現(xiàn)
if nums[mid] > nums[end]:
start = mid
最后也只需要比較一下A[start], A[end]
完整代碼
class Solution(object):
def findMin(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
if not nums:
return 0
start, end = 0, len(nums) - 1
while start + 1 < end:
mid = start + (end - start) / 2
if nums[mid] > nums[end]:
start = mid
else:
end = mid
return min(nums[start], nums[end])