1. 程式人生 > >【劍指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 min=0;
        //通過遍歷陣列找到陣列中的最小值
        for(int i=0;i<array.length;i++){
            if(array[min]>array[i]){
                min=i;
            }
        }
        return array[min];
       
    }
}

雖然題目中輸出最小數即可,不過既然提到了陣列的旋轉,那我們不妨進行一下實現 ,首先通過遍歷找到最小值,然後將最小值後面的放到另一個數組的前面,將最小值前面的放到另一個數組的後面,實現旋轉。

import java.util.ArrayList;
public class Solution {
    public int minNumberInRotateArray(int [] array) {
        if(array.length==0){
            return 0;
        }
        int min=0;
        //通過遍歷陣列找到陣列中的最小值
        for(int i=0;i<array.length;i++){
            if(array[min]>array[i]){
                min=i;
            }
        }
        
        //重新建立一個數組,將陣列進行旋轉
        int []array1=new int[array.length];
        int i=0;
        int j=0;
        //首先最小元素後面的元素移到新的陣列
        for(j=min;j<array.length;j++){
               array1[j-min]=array[j];
        }
        //將最小元素前面的元素移到新的陣列
        for(i=j-min+1;i<array.length;i++){
            array1[i]=array[i-j+min-1];
        }
        return array1[0];
    }
}