求旋轉陣列後的最小值

2021-07-02 16:06:21 字數 886 閱讀 7900

乙個有序陣列,將前面的一段放在陣列的後面就被稱之為旋轉。比如[1,2,3,4,5,6]就可以旋轉為[5,6,1,2,3,4]。輸入乙個旋轉後的陣列,輸出陣列中的最小值。

直接遍歷的時間複雜度是o(n)。接下來介紹並實現乙個o(log n)的演算法。

以[50, 10, 20, 30, 40]為例:

下標:first = 0, last = 4, mid = 2

因為array[mid] < array[first]

所以,array[mid+1 … last] 都大於array[mid]。即,mid+1到last這一部分裡面沒有最小值。這樣就可以捨棄一半,類似於二分查詢了。

class solution 

else

if(rotatearray[first] == rotatearray[last])

else

if(rotatearray[mid] == rotatearray[first])

first++;//針對測試用例6

else

if(rotatearray[mid] == rotatearray[last])

last--;//針對測試用例7

else

}return min(rotatearray[first], rotatearray[last]);

}};

[1,2,3,4,5,6]

[2,3,4,5,6,1]

[3,4,5,6,1,2]

[6,1,2,3,4,5]

[1,2,2,2,2,2]

[2,2,2,2,2,1]

[2,1,2,2,2,2]

[2,2,2,2,1,2]

[1]

旋轉陣列求最小值

這是letcode上的一道題目 leetcode find minimum in rotated sorted array 一 什麼是旋轉陣列呢,就是乙個有序的陣列,在從某乙個位置開始,旋轉到陣列的另一端,例如 0 1 2 3 4 5 6 4 5 6 0 1 2 3 二 使用暴力的方式就是遍歷這個陣...

求旋轉陣列的最小值

思路 基本方法 從頭遍歷一遍,時間複雜度為o n 效率比較低,這裡採用二分查詢,找出中間元素與頭,尾比較,如果中間元素比頭元素大,說明這部分有序,最小值在後半部分,中間元素為頭 如果中間元素比尾元素大,說明最小值在前部分。設定兩個指標start和end分別指向陣列的首尾元素,然後當start指向前半...

Java求旋轉陣列的最小值

把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。輸入乙個遞增排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。例如陣列為的乙個旋轉,該陣列的最小值為1。note 給出的所有元素都大於0,若陣列大小為0,請返回0。可以借助二分查詢法的思想。author 16026 public clas...