旋轉陣列的最小數字

2022-06-22 03:06:16 字數 1530 閱讀 8954

題目描述:

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

演算法描述:

如果從頭到尾進行掃瞄的話,時間複雜度為o(n),但這種方法過於簡單,我們需要找出更加快捷的方法來解決這個問題。於是想到了二分查詢。我們可以定義兩個指標分別指向陣列的頭和尾,這樣去掃瞄陣列,利用二分查詢的機制,首先找到陣列中的中中間值,如果中間值比開頭的值大則將這個中間值得指標付給這個開頭指標,同理如果中間值得值小於尾部的值,則將中間值得指標賦值給尾部指標。總體的思想是這樣的。

演算法實現:

1 #include2

using

namespace

std;34

int searchmin(int *data, int

length)

8 /*初始化一些值 */

9int index1 = 0

; 10

int index2 = length - 1;11

int index =index1;

12 /*核心演算法*/

/* 情況1,陣列初始時就是有序的 */

if(data[index1] <= data[index2])

/*如果是旋轉陣列*/

13

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

1819 index = (index1 + index2) / 2

;20 /*情況2,如果三個指標指向的數字值相同,只能掃瞄

21if(data[index1] == data[index2] && data[index1] ==data[index])

28}

2930

return

min;31}

3233

if(data[index] >=data[index1])

3637

if(data[index] <=data[index2])40}

4142

return

data[index];

43}

4445

intmain(); //情況1

46 // int str = ; //旋轉陣列

47//

int str = ; //情況2

48//

int *str = null; //特殊情況

49int len = sizeof(str) / sizeof(int

);50

51int result =searchmin(str, len);

52if(result == 10000)55

else

58return0;

59 }

旋轉陣列最小數字

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

旋轉陣列最小數字

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

旋轉陣列的最小數字

1.問題描述 把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。輸入乙個遞增排序的陣列的乙個旋轉,輸出該旋轉陣列的最小元素。例如陣列 3,4,5,1,2 為 1,2,3,4,5 的乙個旋轉,該陣列的最小值為1.來自 劍指offer 2.分析 首先我們可以看到原陣列為遞增排序的,並且以...