劍指offer 簡單題 6 旋轉陣列的最小數字

2021-10-10 06:10:01 字數 1221 閱讀 7380

把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。

輸入乙個非遞減排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。

note:給出的所有元素都大於0,若陣列大小為0,請返回0。

示例

輸入[3,4,5,1,2]

返回值1

非遞減 啥意思 遞增或者數相同

思考:1 2 3 4 5 6 7 -> 2 3 4 5 6 7 1

4 5 6 7 1 2 3

7 1 2 3 4 5 6

1 1 2 3 5 8 -> 2 3 5 8 1 1

很多種轉換,不過可以發現規律,只要發現前面的數比後面的數大的話,後面的數一定是最小值~

所以就有了方法一:暴力法,直接掃瞄,誰都不愛

方法1:暴力法

我們直接從0開始掃瞄,如果發現前乙個數比後乙個數大了,那後面那個數就是分界點,也就是最小值

如果掃瞄完畢還是沒有,就直接返回第乙個數即可

// 方法一: 暴力

public

intminnumberinrotatearray

(int

array)

for(

int i=

0; ireturn array[0]

;}

方法二:二分法

暴力法不夠優雅,過於魯莽,我們使用二分法減半安排上~,更優雅,更省時間,複雜度從線性級別下降到了對數級別,不錯

思路:三種情況mid > high、mid < high、mid == high

mid = (low + high)/2

// 方法二: 二分

public

intminnumberinrotatearray

(int

array)

// 如果沒有旋轉,直接返回

int low =0;

int high = array.length-1;

while

(low < high)

else

if(array[mid]

< array[high]

)else

if(array[mid]

== array[high])}

return array[low]

;}

看到【陣列】、【有序】要先在腦子裡過一過二分查詢

劍指offer 演算法題 09 旋轉陣列問題

題目描述 把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。輸入乙個遞增排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。例如陣列為的乙個旋轉,該陣列的最小值為1。輸入 輸入可能包含多個測試樣例,對於每個測試案例,輸入的第一行為乙個整數n 1 n 1000000 代表旋轉陣列的元素個數。...

劍指Offer 6 旋轉陣列的最小元素

description把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。輸入乙個非減排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。例如陣列為的乙個旋轉,該陣列的最小值為1。note 給出的所有元素都大於0,若陣列大小為0,請返回0。可以直接binary search,每次mid和r的...

劍指Offer 題11(旋轉陣列的最小數

1.題目 把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。輸入乙個非減排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。例如陣列為的乙個旋轉,該陣列的最小值為1。note 給出的所有元素都大於0,若陣列大小為0,請返回0。2.思路 可把旋轉後的陣列看做兩個有序陣列,以最小值為分界,前面...