LeetCode 153. Find Minimum in Rotated Sorted Array 20170706
2017-07-06 16:25 方小呆dai 阅读(175) 评论(0) 编辑 收藏 举报Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand.
(i.e., 0 1 2 4 5 6 7
might become 4 5 6 7 0 1 2
).
Find the minimum element.
You may assume no duplicate exists in the array.
题目大意:一个有序数组可能以某个数为轴调换顺序,请找出最小值。
解题思路:一开始最直观的想法是,遍历整个数组,如果碰到某个数比他的前一个数要小的话,该数就是最小值。如果遍历完整个数组都没有出现这种情况的话,那么数组的第一个数就是最小值。该算法的时间复杂度是O(n)。实现该算法后,为了提升算法的时间复杂度,发现可以直接用二分法搜索最小值,时间复杂度只需要O(logn)。
class Solution(object):
def findMin(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
res = 0
sign = 0
if len(nums)==0:
return;
if len(nums)==1:
return nums[0];
for i in range(1,len(nums)):
if nums[i]<nums[i-1]:
res=nums[i]
sign=1
break
if sign==0:
return nums[0]
return res
二分法
class Solution(object):
def findMin(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
if len(nums) == 1:
return nums[0]
if len(nums) == 2:
return min(nums[0],nums[1])
mid = len(nums)/ 2
if nums[mid - 1] > nums[mid]:
return nums[mid]
if nums[mid] < nums[-1]:
return self.findMin(nums[:mid + 1])
return self.findMin(nums[mid:])