1. 題目解析
Leetcode鏈接:852. 山脈數組的峰頂索引
這個問題的理解其實相當簡單,只需看一下示例,基本就能明白其含義了。
核心在于找到題目中所說的峰值所在的下標并返回他們的下標即可。
2. 算法原理
峰頂及兩側數據特點分析
峰頂數據特點:
- 峰頂位置?
arr[i]
?的值大于其前后兩個位置的值,即?arr[i] > arr[i - 1]
?且?arr[i] > arr[i + 1]
。
峰頂左側數據特點:
- 峰頂左側的數據呈現上升趨勢,即?
arr[i]
?的值大于其左側位置的值?arr[i - 1]
,但小于其右側位置的值?arr[i + 1]
。
峰頂右側數據特點:
- 峰頂右側的數據呈現下降趨勢,即?
arr[i]
?的值小于其左側位置的值?arr[i - 1]
,但大于其右側位置的值?arr[i + 1]
。
根據?mid
?位置信息的搜索策略
上升趨勢:
- 若?
mid
?位置的數據呈現上升趨勢,則接下來應在?[mid + 1, right]
?區間內繼續搜索峰頂。
下降趨勢:
- 若?
mid
?位置的數據呈現下降趨勢,則接下來應在?[left, mid - 1]
?區間內搜索峰頂。
峰頂位置:
- 若?
mid
?位置恰好是峰頂,則直接返回該位置作為結果。
3. 代碼編寫?
class Solution {
public:int peakIndexInMountainArray(vector<int>& arr) {int l = 0, r = arr.size() - 1, m = -1;while(l < r){m = (l + r) / 2;if(arr[m] > arr[m + 1]) r = m;else l = m + 1;}return r;}
};
The Last
嗯,就是這樣啦,文章到這里就結束啦,真心感謝你花時間來讀。
覺得有點收獲的話,不妨給我點個贊吧!
如果發現文章有啥漏洞或錯誤的地方,歡迎私信我或者在評論里提醒一聲~?