題目
https://www.lintcode.com/problem/find-minimum-in-rotated-sorted-array/description?_from=ladder&&fromId=2
實現
- 以最後一個元素作爲 target(其實第一個元素也是可以的,但是如果是 [1, 2, 3] 的情況下結果會不對)
- 如果
nums[mid] > target
說明在前半段,left = mid
- 否則說明當前在後半段,
right = mid
- 不斷收斂到中間的位置,最後返回
nums[left]
和 nums[right]
裏面最小的那個就是最小值了
代碼
class Solution:
"""
@param nums: a rotated sorted array
@return: the minimum number in the array
"""
def findMin(self, nums):
if nums is None or len(nums) == 0:
return -float("inf")
target = nums[len(nums) - 1]
left, right = 0, len(nums) - 1
while left + 1 < right:
mid = left + (right - left) // 2
if nums[mid] > target:
left = mid
else:
right = mid
return min(nums[left], nums[right])