把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。 輸入乙個非減排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。 例如陣列為的乙個旋轉,該陣列的最小值為1。
public static int min(int a)
int left = 0;
int right = a.length-1;
if (a[left] < a[right])
if(a[left]==a[right])
else if(mid如果用二分查詢的話,當中間的值大於最右邊的值的時候,那麼最小值一定在mid和right中間,當中間值小於最左邊值的時候,最小值一定在left和mid中間,只有當right mid 和 left的值相同的時候才無法確定 最小值在哪個區間,無法確定的時候讓right的值 自減就好,因為right的一定是大於等於最小值的
測試用例:
public static void main(string args) ;
system.out.println("array1:"+min(array1));
// 有重複數字,並且重複的數字剛好的最小的數字
int array2 = ;
system.out.println("array2:"+min(array2));
// 有重複數字,但重複的數字不是第乙個數字和最後乙個數字
int array3 = ;
system.out.println("array3:"+min(array3));
// 有重複的數字,並且重複的數字剛好是第乙個數字和最後乙個數字
int array4 = ;
system.out.println("array4:"+min(array4));
int array41 = ;
system.out.println("array41:"+min(array41));
// 單調公升序陣列,旋轉0個元素,也就是單調公升序陣列本身
int array5 = ;
system.out.println("array5:"+min(array5));
// 陣列中只有乙個數字
int array6 = ;
system.out.println("array6:"+min(array6));
// 陣列中數字都相同
int array7 = ;
system.out.println("array7:"+min(array7));
}
array1:1
array2:1
array3:1
array4:0
array41:0
array5:1
array6:2
array7:1
旋轉陣列的最小數
題目 把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。輸入乙個非遞減排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。例如陣列為的乙個旋轉,該陣列的最小值為1。note 給出的所有元素都大於0,若陣列大小為0,請返回0。在c c 中實現 如下 class solution int mi...
旋轉陣列的最小數
把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。輸入乙個非減排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。例如陣列為的乙個旋轉,該陣列的最小值為1。note 給出的所有元素都大於0,若陣列大小為0,請返回0。這是一道二分查詢的變形題目 1.旋轉之後的其實可以劃分為兩個有序的子陣列 ...
6 找出旋轉陣列的最小數字
題目描述 把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。輸入乙個非減排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。例如陣列為的乙個旋轉,該陣列的最小值為1。note 給出的所有元素都大於0,若陣列大小為0,請返回0。思路 寫出陣列的幾種可能情況,並用二分思想解題 採用二分法解答這...