示例 1:
輸入:[3,
4,5,
1,2]
輸出:1
示例 2:
輸入:[2,
2,2,
0,1]
輸出:0
最簡單的方式就是使用暴力方式,迴圈遍歷陣列尋找陣列的最小值。但是這種方式沒有利用題目中旋轉陣列的特點,仔細觀察題目以最小值為分界線兩邊是有序的,因此我們可以使用二分查詢。
//因為是乙個遞增排序的陣列,旋轉之後區域性是排序陣列,可以利用二分查詢,平均時間複雜度o(logn),當陣列全部是重複數字的時候時間複雜度為0(n)
public
intminarray1
(int
numbers)
else
if(numbers[mid]
>numbers[high]
)else
,我們唯一可以知道的是,由於它們的值相同,
// 所以無論 是不是最小值,都有乙個它的「替代品」numbers[pivot],因此我們可以忽略二分查詢區間的右端點。
high--;}
}return numbers[low]
;}
拓展:假如陣列中沒有重複元素存在。
//(無重複元素)
//因為是乙個遞增排序的陣列,旋轉之後區域性是排序陣列,可以利用二分查詢,平均時間複雜度o(logn),當陣列全部是重複數字的時候時間複雜度為0(n)
public
intminarray
(int
numbers)
else
if(numbers[mid]
>numbers[high]
)else
,我們唯一可以知道的是,由於它們的值相同,
// 所以無論 是不是最小值,都有乙個它的「替代品」numbers[pivot],因此我們可以忽略二分查詢區間的右端點。
return numbers[high-1]
;}}return numbers[low]
;}
劍指offer 11旋轉陣列中最小的數字
把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。輸入乙個非遞減排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。例如陣列為的乙個旋轉,該陣列的最小值為1。note 給出的所有元素都大於0,若陣列大小為0,請返回0。第一種方法 從頭開始遍歷,當遇到不滿足非遞減排序規律的那個數時,那就是旋...
劍指offer11 旋轉陣列的最小數字
把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。輸入乙個公升序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。例如陣列為的乙個旋轉,該陣列的最小值為1。陣列可能包含重複項。注意 陣列內所含元素非負,若陣列大小為0,請返回 1。樣例 輸入 nums 2,2,2,0,1 輸出 0思路 首先判...
劍指Offer 11 旋轉陣列的最小數字
題目 把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。輸入乙個遞增排序陣列的乙個旋轉,輸出旋轉陣列的最小元素,例如,陣列為的乙個旋轉,該陣列的最小值為1.思路 設定兩個指標。利用二分查詢法。第乙個指標指向第乙個元素,第二個指向最後乙個元素。找到陣列的中間元素,如果中間的元素大於第乙...