题目描述:给定一个在任意位置翻转一次的数组,找出其最小值。
题目链接:153. Find Minimum in Rotated Sorted Array
这个题目很有意思,第一次看的时候就是以为线性时间就是最好的了,谁曾想翻转一次的数组也是可以用二分法,二分查找来查找最小的值,但是要注意mid的计算方式。
代码实现:
class Solution(object):
def findMin(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
if len(nums)==1:
return nums[-1]
mid = (len(nums)-1) // 2
# print(nums)
if nums[mid] > nums[-1]: #证明中间有最小的
return self.findMin(nums[mid+1:])
else:
return self.findMin(nums[:mid+1])
代码实现:
class Solution(object):
def findMin(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
start = 0
end = len(nums) - 1
while(start<end):
mid = start + (end-start) / 2
if nums[mid] > nums[end]:
start = mid + 1
else:
end = mid
return nums[start]