ETH官方钱包

前往
大廳
主題

LeetCode - 852. Peak Index in a Mountain Array 解題心得

Not In My Back Yard | 2021-01-26 00:00:07 | 巴幣 0 | 人氣 478

題目連結:


題目意譯:
讓我們定義一陣列 arr 為一座「山」,如果以下特性滿足:

arr.length ≧ 3
存在某個 i(0 < i < arr.length - 1)其使得:
arr[0] < arr[1] < ... arr[i-1] < arr[i]
arr[i] > arr[i+1] > ... > arr[arr.length - 1]

給定一整數陣列 arr 其保證為一座山,回傳上述定義中的 i 值使得 arr[0] < arr[1] < ... arr[i - 1] < arr[i] > arr[i + 1] > ... > arr[arr.length - 1] 。

限制:
3 ≦ arr.length ≦ 10 ^ 4
0 ≦ arr[i] ≦ 10 ^ 6
arr 保證為一個「山」陣列。
 
進階: 找到 O(n) 的解法很直觀,那麼你能找到 O(log(n)) 的解法嗎?



範例測資:
範例 1:
輸入: arr = [0,1,0]
輸出: 1

範例 2:
輸入: arr = [0,2,1,0]
輸出: 1

範例 3:
輸入: arr = [0,10,5,2]
輸出: 1

範例 4:
輸入: arr = [3,4,5,1]
輸出: 2

範例 5:
輸入: arr = [24,69,100,99,79,78,67,36,26,19]
輸出: 2


解題思維:
O(n) 解法就不贅述了,就是直接掃過 arr 就可以找到了。



而 O(log(n)) 則需要使用二分搜尋法(Binary Search),其精神可以參見這題或是這題

而本題的搜尋條件可以定為 arr[middle] > arr[middle + 1],當前述條件為真則將上界 upper 調整為 middle,反之則將下界 lower 變為 middle + 1(lower 和 upper 初始值於此應定為 1 以及 arr.length - 2)。

當 lower 等於 upper 時,lower 之值即是所求的 i 值。




此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。

創作回應

更多創作