劍指offer 面試題8 旋轉陣列的最小數字

2021-07-02 00:32:50 字數 992 閱讀 3131

題目:

把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。輸入乙個遞增排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。

例如陣列(3,4,5,1,2)位的乙個旋轉,該陣列的最小值為1.

基本思想:

二分查詢,p1指向a[0],p2指向a[len-1]。如果a[mid]>a[p1],則最小值在後半段,p1=mid;如果a[mid]

特殊情況:

注意:在這兩個陣列中,第乙個數字、最後乙個數字和中間數字都是1,我們無法確定中間的數字1屬於第乙個遞增字陣列還是屬於第二個遞增字陣列。

這種情況只能順序查詢的方法。

#include using namespace std;

int mininorder(int a,int index1,int index2)

return result;

}int min(int a,int len)

indexmid=(index1+index2)/2;

//如果index1,index2和indexmid三數相等,則只能順序查詢

if(a[index1]==a[index2]&&a[indexmid]==a[index1])

return mininorder(a,index1,index2);

if(a[indexmid]>=a[index1])

index1=indexmid;

else if(a[indexmid]<=a[index2])

index2=indexmid;

} return a[indexmid];

}int main()

; int b=;

cout<

劍指offer 面試題8 輸出旋轉陣列最小值

include using namespace std int min int arr,int len return arr q int main int m min arr,6 cout 這種 只能處理常規情況,如果陣列旋轉值為0,即陣列還是乙個遞增陣列,p q mid,陷入死迴圈。如果中間值跟兩...

劍指offer 面試題8 旋轉陣列的最小值

package chapter2 面試題8 旋轉陣列的最小值 把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。輸入乙個非遞減排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。例如陣列為的乙個旋轉,該陣列的最小值為1。public class 08 rotatearray int arr...

劍指offer 面試題8 旋轉陣列的最小數值

題目 把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。輸入乙個非遞減排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。例如陣列為的乙個旋轉,該陣列的最小值為1。note 給出的所有元素都大於0,若陣列大小為0,請返回0 我的 class solution return temp 分析 ...