162. Find Peak Element
題目網址:https://leetcode.cn/problems/find-peak-element/
題意:給一整數 array
nums
, 找到峰值並返回其 index。nums
中可能有多個峰值, 返回任何一個峰值的 index 即可。假設
nums[-1] = nums[n] = -∞
設計
time 的演算法。
Solution:
想法:利用 Binary Search, 從一個位置開始, 不斷地向高處走, 那麼最終一定可以到達一個峰值位置, 根據比較
nums[i − 1]
,nums[i]
,nums[i + 1]
三個位置的值來縮小左邊界 or 右邊界, 有以下幾種情況:
nums[i − 1] < nums[i] > nums[i + 1]
:i
即為峰值nums[i − 1] < nums[i] < nums[i + 1]
:i
處於上坡, 峰值在右半邊, 故縮小左邊界nums[i − 1] > nums[i] > nums[i + 1]
:i
處於下坡, 峰值在左半邊, 故縮小右邊界nums[i − 1] > nums[i] < nums[i + 1]
:i
處於山谷, 兩側都是上坡, 可以朝任意方向走(這邊我們選擇往右走, 故縮小左邊界)分析前面四種可能的情況, 我們選擇比較
nums[i]
、nums[i + 1]
➔ 因為這樣可將情況 1、3 是視作一類, 而情況 2、4 視作另一類
cpp
class Solution { |
- time:
➔ Binary Search - space:
➔ 只需常數空間
本部落格所有文章除特別聲明外,均採用 CC BY-NC-SA 4.0 許可協議。轉載請註明來自 Zako's Blog!
評論