劍指offer 旋轉陣列的最小數字

2021-09-02 17:21:26 字數 1294 閱讀 5001

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

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

例如陣列為的乙個旋轉,該陣列的最小值為1。

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

​ 這套題最直觀的解法是,從頭到尾遍歷一遍,就能找出最小的元素,這種思路的時間複雜度是o(n),沒有利用旋轉陣列的特性,顯然達不到面試官的要求。

旋轉之後的陣列可以劃分為兩個遞增排序的子陣列,而且前面的子陣列的元素都大於或者等於後面子陣列的元素。而最小元素剛好是兩個子陣列的分界線。 在排序陣列中可以使用二分查詢實現o(logn)的查詢。(請認真體會這段話,這是這套題能夠二分查詢的關鍵)

具體分析寫在注釋裡

public

intminnumberinrotatearray

(int

array)

int index1 =

0, index2 = array.length -1;

int mid = index1;

while

(array[index1]

>= array[index2]

) mid =

(index1 + index2)/2

;//當這三個數都相等的時候,沒有辦法區分array[mid]是屬於第乙個陣列還是第二個陣列,所以就沒有辦法使用二分查詢

if(array[index1]

== array[index2]

&& array[index1]

== array[mid]

)//如果array[mid] >= array[index1],那麼說明array[mid]位於第乙個陣列,讓index1後移到mid位置

else

if(array[mid]

>= array[index1]

)else

if(array[mid]

<= array[index2])}

return array[mid];}

// 找出array中的最小值

public

intminnum

(int

array,

int index1,

int index2)

return pre;

}

劍指offer 旋轉陣列的最小數

題目描述 把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。輸入乙個非遞減排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。例如陣列為的乙個旋轉,該陣列的最小值為1。note 給出的所有元素都大於0,若陣列大小為0,請返回0。public class test system.out.pr...

劍指offer 旋轉陣列的最小數字

題目 把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。輸入乙個排好序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。例如陣列為的乙個旋轉,該陣列的最小值為1。分析 這道題最直觀的解法並不難。從頭到尾遍歷陣列一次,就能找出最小的元素,時間複雜度顯然是o n 但這個思路沒有利用輸入陣列的特性...

劍指offer 旋轉陣列的最小數字

記錄來自 劍指offer 上的演算法題。題目描述如下 把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。輸入乙個遞增排序的陣列的乙個選擇,輸出旋轉陣列的最小元素。例如陣列是的乙個旋轉,該陣列的最小值是1。這裡可以採用二分查詢的想法,使用兩個指標,乙個指向第乙個元素,乙個指向末尾元素,...