劍指offer[旋轉陣列的最小數字]
阿新 • • 發佈:2018-11-24
劍指offer[旋轉陣列的最小數字]
題目描述
把一個數組最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。 輸入一個非減排序的陣列的一個旋轉,輸出旋轉陣列的最小元素。 例如陣列{3,4,5,1,2}為{1,2,3,4,5}的一個旋轉,該陣列的最小值為1。 NOTE:給出的所有元素都大於0,若陣列大小為0,請返回0。
思路
求陣列的最小數用遍歷,用二分法。所給旋轉陣列的原陣列是一個排序的陣列,所以旋轉之後一定是兩個子陣列,這兩個子陣列一定也是排序的。可以用二分法,判斷中間值位於哪個陣列,如果位於左陣列,則將左指標指向中間值,反之同理。
程式碼
import java.util.ArrayList;
public class Solution {
public int minNumberInRotateArray(int [] array) {
if(array.length==0){
return 0;
}
int left=0;
int right=array.length-1;
int middle=0;
while(left<right){
if(right- left==1){
middle=right;
break;
}
middle=left+(right-left)/2;
if(array[middle]>=array[left]){
left=middle;
}
if(array[middle]<=array[right]){
right=middle;
}
}
return array[middle];
}
}
細節知識
陣列查詢最小值這種,如果你直接遍歷整個陣列,我覺得會被hr直接pass!!!