二分法解旋轉陣列的最小數字

2021-10-08 07:31:13 字數 952 閱讀 4932

把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。輸入乙個遞增排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。例如,陣列 [3,4,5,1,2] 為 [1,2,3,4,5] 的乙個旋轉,該陣列的最小值為1。

示例 1:

輸入:[3,4,5,1,2]

輸出:1

示例 2:

輸入:[2,2,2,0,1]

輸出:0

找陣列中最小的數字,我們很容易想到下面的做法:

**如下:

class

solution

return index;

//返回最小的數字

}}

但是,這種做法的時間複雜度空間複雜度分別為o(n)o(1),而且沒有利用到該旋轉陣列是「乙個遞增排序的陣列的乙個旋轉」的特點,很明顯這種做法並不是最優解。

這道題我們可以利用該旋轉陣列是「乙個遞增排序的陣列的乙個旋轉」的特點,考慮使用二分法解決,其可將遍曆法的 線性級別 時間複雜度降低至 對數級別 。

解題過程:

複雜度分析:

**:

class

solution

return numbers[i];}

}

二分法4 旋轉陣列的最小數字

將乙個排序好的陣列的前一部分和後一部分進行調換,找到這個陣列中的 將乙個排好序的陣列開始的某幾個元素搬到陣列末尾,然後找到該陣列的最小元素。這個題一看如果遍歷一遍陣列肯定可以找到,但並沒有利用旋轉陣列的特性,為o n 可以發現特點就是最小的數字是前後兩個陣列的分界點,如果按原來的思路就是遍歷,然後找...

演算法 查詢 旋轉陣列的最小數字(改造二分法)

題目 把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。輸入乙個遞增排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。例如陣列為的乙個旋轉,改陣列的最小值為1.分析 既然說是改造的二分法,那麼就是找到中間值,然後根據左邊還是右邊去找最小值,然後在左邊或者右邊再找中間值再分左邊和右邊。現在...

二分法旋轉陣列找最小數

一 題目描述 把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。輸入乙個非遞減排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。note 給出的所有元素都大於0,若陣列大小為0,請返回0。示例1輸入 3,4,5,1,2 返回值1 二 思路 這道題要求用二分法,一開始用的是遍歷的方法,時間...