【劍指offer第六題】旋轉陣列的最小數
阿新 • • 發佈:2018-12-13
題目描述
把一個數組最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。 輸入一個非減排序的陣列的一個旋轉,輸出旋轉陣列的最小元素。 例如陣列{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]; } }