难度简单
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组 [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
这个题的思路是用双指针法查找,然后考虑一些特殊情况
/**
* @param {number[]} numbers
* @return {number}
*/
var minArray = function(numbers) {
if(numbers==null||numbers.length<=0){
return false;
}
if(numbers.length==1){
return numbers[0];
}
function inOrder(numbers,p1,p2){
let min=numbers[p1];
for(let i=p1+1;i<=p2;i++){
if(numbers[i]<min){
min=numbers[i];
}
}
return min;
}
let p1=0;
let p2=numbers.length-1;
let indexMid=p1;
while(numbers[p1]>=numbers[p2]){
if(p2-p1===1){
return numbers[p2];
}
indexMid=Math.floor((p1+p2)/2);
//要先判断三者是否相等
if(numbers[indexMid]==numbers[p1]&&numbers[indexMid]==numbers[p2]){
return inOrder(numbers,p1,p2);
}
if(numbers[indexMid]>=numbers[p1]){
p1=indexMid;
}else if(numbers[indexMid]<=numbers[p2]){
p2=indexMid;
}
}
return numbers[indexMid];
};
这篇题解讲的很细致,和我的有一点点不一样