假设一个旋转排序的数组其起始位置是未知的(比如0 1 2 4 5 6 7 可能变成是4 5 6 7 0 1 2)。
你需要找到其中最小的元素。
你可以假设数组中不存在重复的元素。
样例
给出[4,5,6,7,0,1,2] 返回 0
顺序查找,当出现比起始元素小的值即为最小值,时间复杂度O(n)
class Solution: """ @param: nums: a rotated sorted array @return: the minimum number in the array """ def findMin(self, nums): # write your code here if len(nums) < 2: return nums min = nums[0] for i in range(len(nums)): if min > nums[i]: return nums[i] return min
九章参考,用二分法也能AC,但实际上有问题(17.12.13)
class Solution: # @param nums: a rotated sorted array # @return: the minimum number in the array def findMin(self, nums): if len(nums) == 0: return 0 start, end = 0, len(nums) - 1 target = nums[-1] while start + 1 < end: mid = (start + end) / 2 if nums[mid] <= target: end = mid else: start = mid return min(nums[start], nums[end])
num = [0,2,3,7,1,5,6] 时,最小值应该是0,但九章给出的为1