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