剑指Offer面试题8:旋转数组的最小数字(JS实现)
题目描述: 题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1
//indexMin初始化为index1是为了防止将排序数组的前面0个元素搬到最后面
//即排序数组本身
function Min(arr) {
var len = arr.length;
if(arr === null || len < 0) {
return null;
}else {
var index1 = 0,
index2 = len - 1,
indexMin = index1;
while(arr[index1] >= arr[index2]) {
if(index2 - index1 === 1) {
indexMin = index2;
break;
}
indexMin = Math.floor((index1+index2) / 2);
//如果index1,index2,indexMin指向的数字相等,就只能顺序查找
if(arr[index1] === arr[indexMin] && arr[index2]=== arr[indexMin]) {
return MinInorder(arr, index1, index2);
}
if(arr[indexMin] >= arr[index1]) {
index1 = indexMin
} else {
index2 = indexMin;
}
}
return arr[indexMin];
}
}
function MinInorder(arr, index1, index2) {
var result = arr[index1];
for(var i = index1; i < index2; i++) {
if(arr[i] < result) {
result = arr[i];
}
}
return result;
}