LeetCode 筆記 - 852. Peak Index in a Mountain Array
題目在此 852. Peak Index in a Mountain Array
給定一個山形陣列 arr
,請找出陣列中峰值(peak)的索引。山形陣列是指先遞增後遞減的陣列,且至少包含三個元素。
解題思維
這題可以使用二分搜尋法來解決,因為山形陣列的特性使得我們可以有效地縮小搜尋範圍。
我們可以從陣列的中間元素開始比較,並根據中間元素與其右側元素的大小關係來決定下一步的搜尋方向:
- 如果中間元素小於其右側元素,表示峰值在右側,因此我們將搜尋範圍縮小到右半部。
- 如果中間元素大於或等於其右側元素,表示峰值在左側或就是中間元素,因此我們將搜尋範圍縮小到左半部。
這樣持續進行,直到搜尋範圍縮小到只剩下一個元素,該元素即為峰值的索引。
Time complexity 是 $O(log n)$
因為每次搜尋都將範圍縮小一半。
Space complexity 是 $O(1)$
因為我們只使用了常數級別的額外空間來存儲索引。
程式碼
1 | class Solution: |