LeetCode 845. 陣列中的最長山脈(C++、python)
阿新 • • 發佈:2018-12-02
我們把陣列 A 中符合下列屬性的任意連續子陣列 B 稱為 “山脈”:
B.length >= 3
- 存在
0 < i < B.length - 1
使得B[0] < B[1] < ... B[i-1] < B[i] > B[i+1] > ... > B[B.length - 1]
(注意:B 可以是 A 的任意子陣列,包括整個陣列 A。)
給出一個整數陣列 A
,返回最長 “山脈” 的長度。
如果不含有 “山脈” 則返回 0
。
示例 1:
輸入:[2,1,4,7,3,2,5] 輸出:5 解釋:最長的 “山脈” 是 [1,4,7,3,2],長度為 5。
示例 2:
輸入:[2,2,2] 輸出:0 解釋:不含 “山脈”。
C++
class Solution { public: int longestMountain(vector<int>& A) { int n=A.size(); if(n<3) { return 0; } int res=0; for(int i=1;i<n-1;i++) { if(A[i-1]<A[i] && A[i+1]<A[i]) { int count=1; int left=i-1; int right=i+1; while(left>=0) { if(A[left]<A[left+1]) { count++; left--; } else { break; } } while(right<n) { if(A[right]<A[right-1]) { count++; right++; } else { break; } } res=max(res,count); } } return res; } };
python
class Solution: def longestMountain(self, A): """ :type A: List[int] :rtype: int """ n=len(A) if n<3: return 0 res=0 for i in range(1,n-1): if A[i-1]<A[i] and A[i+1]<A[i]: count=1 left=i-1 right=i+1 while left>=0: if A[left]<A[left+1]: count+=1 left-=1 else: break while right<n: if A[right]<A[right-1]: count+=1 right+=1 else: break res=max(res,count) return res