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.
Example 1:
Input: [3,4,5,1,2]
Output: 1
Example 2:
Input: [4,5,6,7,0,1,2]
Output: 0
思路:
第一种方法:O(n)
1、根据题意可以知道这个数组必然有一个低谷、也就是有一个数会突然下滑、而下滑的点便是最小值
2、所以可以遍历数组如果不是递增的话、便找到了最小值
第二种方法:二叉搜索
1、因为如果没有旋转的话、数组便是递增的、如果旋转了,那肯定是不会递增的、而且最后一个数会小于第一个数
2、所以、先判断是否旋转了、没旋转直接返回nums[0]
3、因为用的mid值、我们并不确定他会定位到哪里
所以两种情况都要判断:
第一种:nums[mid] > nums[mid+1]、则nums[mid+1]为最小值
第二种:nums[mid] < nums[mid-1]、则nums[mid] 为最小值
4、然后的话就判断nums[mid] 和nums[0]的关系、如果大于则证明mid属于左半边递增部分、则最小值在其右边、start = mid + 1;
如果小于则证明mid属于右半边递增部分、则最小值在其左边、end = mid - 1