题目链接:www.acwing.com/problem/con…
分析
- 二分 性质是 是否大于
nums[0] - 严格确保 第一段
>= nums[0]第二段< nums[0]需要while(n > 0 && nums[n] == nums[0]) n--; - 二分
3.1
if(nums[mid] < nums[0])第二段 找第二段的第一个点r = mid3.2else第一段l = mid + 1
Code
/**
* @param {number[]} nums
* @return {number}
*/
var findMin = function(nums) {
let n = nums.length - 1;
if(n < 0) return -1;
//
while(n > 0 && nums[n] == nums[0]) n--;
if(nums[n] >= nums[0]) return nums[0]; //说明第二段没有
let l = 0, r = n;
while(l < r){
let mid = l + r >> 1;
if(nums[mid] < nums[0]) r = mid;
else l = mid + 1;
}
return nums[l];
};