在??途W做題發現這道題的高贊回答解題不夠簡潔爽快,奈何回復太晚被埋沒在評論中,在此與有緣人分享下!
原題:把一個數組最開始的若干個元素搬到數組的末尾,我們稱之為數組的旋轉。 輸入一個非遞減排序的數組的一個旋轉,輸出旋轉數組的最小元素。 例如數組{3,4,5,1,2}為{1,2,3,4,5}的一個旋轉,該數組的最小值為1。 NOTE:給出的所有元素都大于0,若數組大小為0,請返回0。
解題思路:
思路:數組下標其實就是一種指針,利用這一性質即可。
旋轉后的數組可以看成前后兩個非遞減序列。
首先,選取數組中間的數array[center]
然后,與當前數組的頭尾元素比較,此時分兩種情況考慮:
1、中間數大于等于當前數組頭元素,則中間元素在前一遞增序列中,意味著最小值一定在該元素之后,于是將數組范圍縮小到 此中間數的下標 到 數組尾。
2、中間數小于等于當前數組尾元素,則中間元素在后一遞增序列中,意味著最小值一定在該元素之前,于是將數組范圍縮小到 數組頭 到 此中間數的下標。
循環的最后,一定是數組的頭指向前一個非遞減序列的最后一個元素,尾指向后一個非遞減序列的頭元素,即最小值。
import java.util.ArrayList;
public class Solution {
public int minNumberInRotateArray(int [] array) {
int preIndex=0;
int endIndex=array.length-1;
int center;
while(endIndex-preIndex>1){
center=(endIndex+preIndex)/2;
if(array[center]>=array[preIndex])
preIndex=center;
if(array[center]<=array[endIndex])
endIndex=center;
}
return array[endIndex];
}
}