劍指 Offer - 6:旋轉陣列的最小數字
阿新 • • 發佈:2018-11-26
題目描述
把一個數組最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。輸入一個非減排序的陣列的一個旋轉,輸出旋轉陣列的最小元素。
例如陣列 {3, 4, 5, 1, 2} 為 { 1, 2, 3, 4, 5 } 的一個旋轉,該陣列的最小值為1。
NOTE:給出的所有元素都大於0,若陣列大小為0,請返回0。
題目連結:https://www.nowcoder.com/practice/9f3231a991af4f55b95579b44b7a01ba
解題思路
二分思想:陣列變成了兩段升序的子序列,每一次找中間點,如果中間點大於最後邊的,代表轉折點在中間點和右端之間,否則在左端
public class Solution {
public int minNumberInRotateArray(int [] array) {
int i = 0;
int j = array.length-1;
if (i == j) return 0;
int middle = 0;
while (array[i] >= array[j]) {
if (j - i == 1) {
middle = j;
break ;
}
middle = i + (j - i) / 2;
if (array[middle] >= array[j]) {
i = middle;
} else {
j = middle;
}
}
return array[middle];
}
}