LeetCode 153
研究一下rotated之后数组的特点,可以分成两段,前一段升序,后一段也是升序,只是后一段的升序小于前一段。
如果拿第一个数做为标记数字,采用二分法,在中间找一个数,比第一个数大的话,那么最小的应该在后半段,如果小的话,那么应该是在前半段(包括自己)。
def findMin(self, nums: List[int]) -> int:
if len(nums) == 0: raise Exception("not valid input")
if len(nums) == 1: return nums[0]
pivot = nums[0]
last = nums[-1]
if pivot < last: return pivot
low = 1
high = len(nums) - 1
while low < high:
mid = low + ((high - low) >> 1)
if nums[mid] > pivot:
low = mid + 1
else:
high = mid
return nums[low]