在呕⒓桑客網(wǎng)做題發(fā)現(xiàn)這道題的高贊回答解題不夠簡潔爽快,奈何回復(fù)太晚被埋沒在評論中橱鹏,在此與有緣人分享下膜蠢!
原題:把一個數(shù)組最開始的若干個元素搬到數(shù)組的末尾,我們稱之為數(shù)組的旋轉(zhuǎn)蚀瘸。 輸入一個非遞減排序的數(shù)組的一個旋轉(zhuǎn)狡蝶,輸出旋轉(zhuǎn)數(shù)組的最小元素。 例如數(shù)組{3,4,5,1,2}為{1,2,3,4,5}的一個旋轉(zhuǎn)贮勃,該數(shù)組的最小值為1。 NOTE:給出的所有元素都大于0苏章,若數(shù)組大小為0寂嘉,請返回0奏瞬。
解題思路:
思路:數(shù)組下標(biāo)其實(shí)就是一種指針,利用這一性質(zhì)即可泉孩。
旋轉(zhuǎn)后的數(shù)組可以看成前后兩個非遞減序列硼端。
首先,選取數(shù)組中間的數(shù)array[center]
然后寓搬,與當(dāng)前數(shù)組的頭尾元素比較珍昨,此時分兩種情況考慮:
1、中間數(shù)大于等于當(dāng)前數(shù)組頭元素句喷,則中間元素在前一遞增序列中镣典,意味著最小值一定在該元素之后,于是將數(shù)組范圍縮小到 此中間數(shù)的下標(biāo) 到 數(shù)組尾唾琼。
2兄春、中間數(shù)小于等于當(dāng)前數(shù)組尾元素,則中間元素在后一遞增序列中锡溯,意味著最小值一定在該元素之前赶舆,于是將數(shù)組范圍縮小到 數(shù)組頭 到 此中間數(shù)的下標(biāo)。
循環(huán)的最后祭饭,一定是數(shù)組的頭指向前一個非遞減序列的最后一個元素芜茵,尾指向后一個非遞減序列的頭元素,即最小值倡蝙。
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];
}
}