劍指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;
}