LeetCode:852. Peak Index in a Mountain Array
阿新 • • 發佈:2018-12-19
問題描述:
我們把符合下列屬性的陣列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
提示:
3 <= A.length <= 10000
0 <= A[i] <= 10^6
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))
宣告: 總結學習,有問題或不妥之處,可以批評指正哦。