1. 問題描述
把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。輸入乙個遞增排序的陣列的乙個旋轉,輸出該旋轉陣列的最小元素。例如陣列{3,4,5,1,2}
為{1,2,3,4,5}的乙個旋轉,該陣列的最小值為1.(來自《劍指offer》)
2.分析
首先我們可以看到原陣列為遞增排序的,並且以最小元素為界左邊的為遞增有序,右邊的也為遞增有序因此我們可以使用二分查詢。我們定義3個指標left,right,mid,因為為旋轉陣列除了他本身(1,2,3,4,5),left指向的值肯定大於等於right 指向的值(反之那證明就是陣列本身執行返回即可),遍歷時 如果 mid指向的值大於left指向的值,那麼在繼續在left的右邊搜尋。如果mid指向的值小於right指向的值,那麼在mid的左邊搜尋。 另外一種情況0,1,1,1,1 的乙個旋轉為 1,1,1,0,1 這種 mid,left,right指向的值都為 1 ,我們只能順序查詢最小值。
3.**
#include int isnotfind = 0;
int findmin(int* array, int length)
int left = 0;
int right = length - 1;
int middle = left;
while (array[left] >= array[right])
middle = (right + left) / 2;
if (array[left] == array[middle] && array[right] == array[middle])
if (array[left] <= array[middle])
if (array[right] >= array[middle])
}return array[middle];
}int mininorder(int* array, int index1, int index2)
}return result;
}
旋轉陣列最小數字
把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。輸入乙個遞增排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。例如陣列 為的乙個旋轉,該陣列的最小值為1。code int min int numbers,int length int low 0 int high length 1 in...
旋轉陣列最小數字
旋轉陣列最小數字 劍指offer 二分查詢 題目描述 把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。輸入乙個遞增排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。解題思路 題目要求找到最小元素,第一反應是排序,但陣列基本有序直接排序浪費效能。結合資料的特點前半部分遞增,後半部分遞減,...
旋轉陣列的最小數字
題目描述 把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。輸入乙個遞增排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。例如陣列為的乙個旋轉,該陣列的最小值為1。輸入 輸入可能包含多個測試樣例,對於每個測試案例,輸入的第一行為乙個整數n 1 n 1000000 代表旋轉陣列的元素個數。...