AcWing 22. 旋转数组的最小数字_JS
原题链接
中等
作者:
cyb-包子
,
2021-05-18 17:03:29
,
所有人可见
,
阅读 278
分析
- 二分 性质是 是否大于
nums[0]
- 严格确保 第一段
>= nums[0]
第二段< nums[0]
需要 while(n > 0 && nums[n] == nums[0]) n--;
- 二分
3.1 if(nums[mid] < nums[0])
第二段 找第二段的第一个点 r = mid
3.2 else
第一段 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];
};