旋轉陣列中找出最小數

2021-09-25 20:08:44 字數 1395 閱讀 6248

把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。 輸入乙個非減排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。 例如陣列為的乙個旋轉,該陣列的最小值為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。思路 寫出陣列的幾種可能情況,並用二分思想解題 採用二分法解答這...