假设一个排好序的数组在其某一未知点发生了旋转(比如0 1 2 4 5 6 7 可能变成4 5 6 7 0 1 2)。你需要找到其中最小的元素。
0 1 2 4 5 6 7
4 5 6 7 0 1 2
样例 1:
输入:[4, 5, 6, 7, 0, 1, 2] 输出:0 解释: 数组中的最小值为0
样例 2:
输入:[2,1] 输出:1 解释: 数组中的最小值为1
你可以假设数组中不存在重复元素。
class Solution: """ @param nums: a rotated sorted array @return: the minimum number in the array """ def findMin(self, nums): # write your code here start, end = 0, len(nums) - 1 while start + 1 < end: #第一种情况,如果直接是升序数组的话,直接返回 if (nums[start] < nums[end]): return nums[start] mid = (start + end) // 2 #说明左边是升序的,最小值肯定不在左边,上面已经判断过了 if (nums[start] < nums[mid]): start = mid + 1 else: #说明右边是升序的,最小值在左边 end = mid if (nums[start] < nums[end]): return nums[start] else: return nums[end]