1. 程式人生 > >迴圈有序陣列最小值

迴圈有序陣列最小值

對於一個有序迴圈陣列arr,返回arr中的最小值。有序迴圈陣列是指,有序陣列左邊任意長度的部分放到右邊去,右邊的部分拿到左邊來。比如陣列[1,2,3,3,4],是有序迴圈陣列,[4,1,2,3,3]也是。

給定陣列arr及它的大小n,請返回最小值。

測試樣例: [4,1,2,3,3],5 返回:1
public int getMin(int[] arr, int n) {
        int left = 0;
        int right = arr.length-1;
        int mid=0;
        while(left < right){
        	mid = left + (right - left)/2;
        	//這是判斷已經被改動位置的迴圈陣列
        	if(arr[mid] > arr[left]){
        		 left = mid;//這是判斷在右邊最小有序
        	}else if(arr[mid] < arr[left]){
        		 right = mid;//這是判斷在左邊最小有序
        	}else{
        		//這是left=mid的情況時
        		 mid++;
        		 break;
        	}
        }
        int min = arr[mid];
        //還要判斷一下沒有改動迴圈陣列的情況
        int min_min = min>arr[0]? arr[0]:min;
        return min_min;
	}