求旋轉陣列的最小值

2021-07-13 09:27:15 字數 1161 閱讀 1766

思路:

基本方法:從頭遍歷一遍,時間複雜度為o(n),效率比較低,這裡採用二分查詢,找出中間元素與頭,尾比較,如果中間元素比頭元素大,說明這部分有序,最小值在後半部分,中間元素為頭:如果中間元素比尾元素大,說明最小值在前部分。

設定兩個指標start和end分別指向陣列的首尾元素,然後當start指向前半段最後乙個元素,end指向後半段第乙個元素,這是程式就找到了陣列中的最小元素,就是end指向的那個數,程式的出口就是 end-start==1。

#include#include#includeint minorder(int* a,int n )

} return min;

}int min(int* a,int n)

int mid=(start+end)/2;

if(a[mid]==a[start]&&a[mid]==a[end]) //當下標為start,end,mid的數相同時,只能順序訪問。

if(a[start]<=a[mid])

else if(a[mid]<=a[end])

}return a[start];

}void test()

; int ret1=min(a1,sizeof(a1)/sizeof(a1[0]));

printf("%d\n",ret1);

int a2[5]=;

int ret2=min(a2,sizeof(a2)/sizeof(a2[0]));

printf("%d\n",ret2);

int a3[5]=;

int ret3=min(a3,sizeof(a3)/sizeof(a3[0]));

printf("%d\n",ret3);

int a4[5]=;

int ret4=min(a4,sizeof(a4)/sizeof(a4[0]));

printf("%d\n",ret4);

int a5[5]=;

int ret5=min(a5,sizeof(a5)/sizeof(a5[0]));

printf("%d\n",ret5);

}int main()

結果:

旋轉陣列求最小值

這是letcode上的一道題目 leetcode find minimum in rotated sorted array 一 什麼是旋轉陣列呢,就是乙個有序的陣列,在從某乙個位置開始,旋轉到陣列的另一端,例如 0 1 2 3 4 5 6 4 5 6 0 1 2 3 二 使用暴力的方式就是遍歷這個陣...

求旋轉陣列後的最小值

乙個有序陣列,將前面的一段放在陣列的後面就被稱之為旋轉。比如 1,2,3,4,5,6 就可以旋轉為 5,6,1,2,3,4 輸入乙個旋轉後的陣列,輸出陣列中的最小值。直接遍歷的時間複雜度是o n 接下來介紹並實現乙個o log n 的演算法。以 50,10,20,30,40 為例 下標 first ...

Java求旋轉陣列的最小值

把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。輸入乙個遞增排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。例如陣列為的乙個旋轉,該陣列的最小值為1。note 給出的所有元素都大於0,若陣列大小為0,請返回0。可以借助二分查詢法的思想。author 16026 public clas...