版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhdl11/article/details/85279420
题目描述
假设按照升序排序的数组在预先未知的某个点上进行了旋转。
( 例如,数组 [0,1,2,4,5,6,7]
可能变为 [4,5,6,7,0,1,2]
)。
请找出其中最小的元素。
你可以假设数组中不存在重复元素。
示例 1:
输入: [3,4,5,1,2]
输出: 1
示例 2:
输入: [4,5,6,7,0,1,2]
输出: 0
解题思路
这题的核心解题思路就是使用二分查找。
- 当得到一个输入数组时,首先比较其首字符与尾字符大小,当首大于尾的话,传入这个数组的最小值就是首字符的值。
- 如果第一步中,首大于尾,则最小值可能在数组中间,使用二分查找,分别查找数组的两部分。
- 返回这段数组的最小值
代码实现
核心代码实现:GitHub地址
def find(nums, init):
result = init
if nums[0] <= nums[-1]:
if nums[0] <= result:
result = nums[0]
else:
result = min(find(nums[0:len(nums) // 2], result), find(nums[len(nums) // 2:], result), result)
return result
class Solution(object):
def findMin(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
return find(nums, 999999999)