1. 程式人生 > >劍指offer[旋轉陣列的最小數字]

劍指offer[旋轉陣列的最小數字]

劍指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!!!