劍指Offer 面試題11 旋轉陣列的最小數字

2021-10-08 01:23:47 字數 1645 閱讀 4830

思路

暴力遍歷 時間o(n)

二分查詢最小的數 時間o(logn)

#include

"stdafx.h"

#include

intfindminnum

(int

*data,

int length)

return data[end]

;}

思路

暴力遍歷 時間o(n)

二分查詢最小的數 時間o(logn) 一,當遇到mid、start、end都相等的情況直接改用遍歷。二、或者在當data[mid]==data[end]時讓end–,到小於當前值的那個位置繼續遍歷。

int

findminnum

(int

*data,

int length)

return data[end]

;}

測試**

// ********************測試**********************

void

test

(int

* numbers,

int length,

int expected)

catch(.

..)}

intmain

(int argc,

char

* ar**)

;test

(array1,

sizeof

(array1)

/sizeof

(int),

1);// 有重複數字,並且重複的數字剛好的最小的數字

int array2=

;test

(array2,

sizeof

(array2)

/sizeof

(int),

1);// 有重複數字,但重複的數字不是第乙個數字和最後乙個數字

int array3=

;test

(array3,

sizeof

(array3)

/sizeof

(int),

1);// 有重複的數字,並且重複的數字剛好是第乙個數字和最後乙個數字

int array4=

;test

(array4,

sizeof

(array4)

/sizeof

(int),

0);// 單調公升序陣列,旋轉0個元素,也就是單調公升序陣列本身

int array5=

;test

(array5,

sizeof

(array5)

/sizeof

(int),

1);// 陣列中只有乙個數字

int array6=

;test

(array6,

sizeof

(array6)

/sizeof

(int),

2);// 輸入nullptr

test

(nullptr,0

,0);

return0;

}

劍指offer 面試題11 旋轉陣列的最小數字

完整 位址 把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。輸入乙個非遞減排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。例如陣列為的乙個旋轉,該陣列的最小值為1。note 給出的所有元素都大於0,若陣列大小為0,請返回0。這道題目相對前面的比較複雜,坑比較多 此時用二分法解決,mi...

劍指Offer面試題11 旋轉陣列的最小數字

把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。輸入乙個非減排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。例如陣列為的乙個旋轉,該陣列的最小值為1。note 給出的所有元素都大於0,若陣列大小為0,請返回0。牛客網ac class solution int left 0,right...

《劍指offer》面試題11 旋轉陣列的最小數字

題目 把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。輸入乙個遞增排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。例如,陣列為的乙個旋轉,該陣列的最小值為1。分析 我們注意到旋轉之後的陣列實際上可以劃分為兩個排序的子陣列,而且前面子陣列的元素都大於或者等於後面子陣列的元素。和二分查詢...