1. 程式人生 > >LeetCode:852. Peak Index in a Mountain Array

LeetCode:852. Peak Index in a Mountain Array

問題描述:

852. 山脈陣列的峰頂索引

我們把符合下列屬性的陣列A稱作山脈:

A.length >= 3

存在0 < i < A.length - 1使得A[0] < A[1] < ... A[i-1] < A[i] > A[i+1] > ... > A[A.length - 1] 給定一個確定為山脈的陣列,返回任何滿足A[0] < A[1] < ... A[i-1] < A[i] > A[i+1] > ... > A[A.length - 1]i的值。

示例 1:

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

示例 2:

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

提示:

  1. 3 <= A.length <= 10000
  2. 0 <= A[i] <= 10^6
  3. A 是如上定義的山脈

問題分析:

最近看影象看的腦殼疼,刷道題緩衝一下,結果發現和LeetCode:162. Find Peak Element 解決方法一樣,或者說,比它更簡單,題目分析可以參考LeetCode:162,即可,二分法處理,這次用遞迴實現。

Python3實現:

# @Time   :2018/11/01
# 二分查詢 - 遞迴實現


class Solution:
    def peakIndexInMountainArray
(self, A): if len(A) == 1: return 0 # 設定遞迴出口 if len(A) == 2: if A[0] > A[1]: return 0 return 1 mid = len(A) // 2 if A[mid-1] > A[mid]: # 左遞迴 num = self.peakIndexInMountainArray(A[0:mid]) return num elif A[mid+
1] > A[mid]: # 右遞迴 num = self.peakIndexInMountainArray(A[mid+1:]) return num + 1 + mid else: # 其他情況 return mid if __name__ == '__main__': solu = Solution() A = [0, 2, 1, 0, 0] print(solu.peakIndexInMountainArray(A))

宣告: 總結學習,有問題或不妥之處,可以批評指正哦。