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

2021-10-08 14:33:59 字數 1111 閱讀 2211

示例 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.思路 設定兩個指標。利用二分查詢法。第乙個指標指向第乙個元素,第二個指向最後乙個元素。找到陣列的中間元素,如果中間的元素大於第乙...