题目描述
假设按照升序排序的数组在预先未知的某个点上进行了旋转。
( 例如,数组 [0,1,2,4,5,6,7]
可能变为 [4,5,6,7,0,1,2]
)。
请找出其中最小的元素。
你可以假设数组中不存在重复元素。
示例 1:
1 | 输入: [3,4,5,1,2] |
示例 2:
1 | 输入: [4,5,6,7,0,1,2] |
解题思路
这题的核心解题思路就是使用二分查找。
- 当得到一个输入数组时,首先比较其首字符与尾字符大小,当首大于尾的话,传入这个数组的最小值就是首字符的值。
- 如果第一步中,首大于尾,则最小值可能在数组中间,使用二分查找,分别查找数组的两部分。
- 返回这段数组的最小值
代码实现
核心代码实现:GitHub地址
1 | def find(nums, init): |