旋轉陣列中找最小值

2021-08-20 19:34:28 字數 1206 閱讀 8666

概念:

旋轉陣列就是,將乙個排序陣列的前n位數挪到陣列的後面,我們稱之為旋轉陣列。例如陣列就是陣列的乙個旋轉。

分析:

找出乙個陣列中最小的數並不難,只需遍歷陣列即可,但是次方法的時間複雜度為o(n),而且沒有利用旋轉陣列的特性。

解決:

我們注意到旋轉後的陣列實際上可劃分為兩個排序的陣列,而且前面的子陣列的值都要大於或等於後面的子陣列的元素。並且最小的元素恰好是是這兩個子陣列的分界線。所以試著用二分查詢法來尋找這個數。

使用兩個指標分別指向陣列的第乙個數和最後乙個數,接著求出中間元素,如果中間元素位與前面的遞增子數列,那麼他應該大於或者等於第乙個指標指向的元素,此時將第乙個指標指向中間元素,這樣就縮小了查詢範圍,同樣依照此原理,可以把end指標也指向中間元素,也可以縮小範圍。

如果第乙個指標和第二個指標相差為一時,end指標所指向的值就是最小值。

**如下:

#includeusing namespace std;

int find_inorder(int *array, int len)

} return min;

}int find(int *array, int len)

int mid = (start + end) / 2;

if (array[start] == array[mid] && array[start] == array[end])

if (array[mid] >= array[start])

if (array[mid] <= array[end])

}return array[mid];

}int main()

; int len = sizeof(array) / sizeof(array[0]);

int min = find(array, len);

cout << min << endl;

return 0;

}

注意:需要考慮到一種情況,當第乙個元素等於中間元素並且等於最後乙個元素,我們無法判斷中間元素到底屬於哪乙個子陣列,此時,就需要順序查詢。

陣列1 旋轉陣列 找最小值 找指定值

1.乙個有序陣列1,2,3,4,5,6,7,8,9,但是被截斷處理了,變成了5,6,7,8,9,1,2,3,查詢陣列的最小值 旋轉陣列求最小值 最小元素位於end start 1的位置 迴圈條件是array start array end 特殊情況 1 旋轉0個元素,第乙個元素是最小值,因此mid初...

劍指offer 旋轉陣列找最小值

把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。輸入乙個非遞減排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。例如陣列為的乙個旋轉,該陣列的最小值為1。note 給出的所有元素都大於0,若陣列大小為0,請返回0。思路 根據旋轉陣列的定義可知旋轉陣列可分為兩個有序序列,可用二分法查詢。...

旋轉陣列求最小值

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