1. 程式人生 > >劍指 Offer - 6:旋轉陣列的最小數字

劍指 Offer - 6:旋轉陣列的最小數字

題目描述

把一個數組最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。輸入一個非減排序的陣列的一個旋轉,輸出旋轉陣列的最小元素。

例如陣列 {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]; } }