把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组
[3,4,5,1,2] 为 [1,2,3,4,5] 的一个旋转,该数组的最小值为1。示例 1:
输入:[3,4,5,1,2] 输出:1 示例 2:
输入:[2,2,2,0,1] 输出:0
有序递增数组使用二分查找法实现O(logN)时间复杂度的查找
/**
* @param {number[]} numbers
* @return {number}
*/
var minArray = function(numbers) {
if(numbers.length<2 || numbers[0]<numbers[numbers.length-1]) return numbers[0];
let left = 0;
let right = numbers.length-1;
let mid = Math.floor((left+right)/2);
while(right-left>1){
if(numbers[left]===numbers[mid] && numbers[mid]===numbers[right]) return getMin(numbers,left,right);
if(numbers[mid]>=numbers[left]){
left = mid;
}else if(numbers[mid]<=numbers[right]){
right = mid;
}else{
}
mid = Math.floor((left+right)/2);
}
return numbers[right];
};
function getMin(numbers,left,right){
let res = numbers[left];
for(let i=left+1;i<=right;i++){
if(numbers[i]<res){
res = numbers[i];
}
}
return res;
}