C 演算法之 旋轉陣列的最小數字

2021-06-27 19:58:12 字數 835 閱讀 3993

題目:把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。輸入乙個遞增排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。例如陣列為的乙個旋轉,該陣列的最小值為1.

我們注意到旋轉之後的陣列實際上可以劃分為兩個排序的子陣列,而且前面的子陣列的元素都大於或者等於後面子陣列的元素。我們還可以注意到最小的元素剛好是這兩個子陣列的分界線。我們試著用二元查詢法的思路在尋找這個最小的元素。

int mininorder(int array, int i, int j)

} return result;

}int min(int array, int nlength)

int index1 = 0;

int index2 = nlength - 1;

int indexmid = index1;

while (array[index1] >= array[index2])

//如果中間的數字大於開頭的index1,那麼最小的數字一定在這個中間數的後面,令index1=mid這個中間數

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

//如果中間的數字小於結尾的index2,那麼最小的數字一定在這個中間數字的前面,令index2=mid

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

//當index1與index2相差為1 的時候,最小的數就是index2;

if (index2 - index1 == 1)

}return array[indexmid];

}

旋轉陣列最小數字

把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。輸入乙個遞增排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。例如陣列 為的乙個旋轉,該陣列的最小值為1。code int min int numbers,int length int low 0 int high length 1 in...

旋轉陣列最小數字

旋轉陣列最小數字 劍指offer 二分查詢 題目描述 把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。輸入乙個遞增排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。解題思路 題目要求找到最小元素,第一反應是排序,但陣列基本有序直接排序浪費效能。結合資料的特點前半部分遞增,後半部分遞減,...

演算法 旋轉陣列的最小數字

輸入乙個遞增排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。例如陣列為陣列的乙個旋轉,該陣列的最小值為1。把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉,這本身沒什麼,但是如果旋轉前的陣列是乙個排序好的遞增陣列,旋轉陣列就會有一些比較有意思的特性。上圖中是乙個原陣列與旋轉陣列,我們可...