二分查找:
- 找到数组的中间元素
mid - 如果中间元素 > 第一个元素,说明第一个元素到中间元素是升序的,最小值在
mid右边 - 如果中间元素 < 数组第一个元素,说明最小值在
mid左边 nums[mid] > nums[mid + 1]的时候mid+1是最小值nums[mid-1] > nums[mid]的时候nums[mid]是最小值- 特殊情况 长度为1的时候第一个最小,有序数组的时候
nums[r]>nums[0]也是第一个最小
var findMin = function(nums) {
let l=0,r=nums.length-1;
if(nums.length==1) return nums[0]
if(nums[r]>nums[0]) return nums[0]
while(l<=r){
let mid=(l+r)>>1;
if(nums[mid] > nums[mid + 1]) return nums[mid+1]
if(nums[mid-1] > nums[mid]) return nums[mid]
if(nums[mid]>nums[0])
l=mid;
else
r=mid;
}
return -1;
};