把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。
輸入乙個非遞減排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。
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.思路 可把旋轉後的陣列看做兩個有序陣列,以最小值為分界,前面...