LeetCode 845 Longest Mountain in Array 正向DP+反向DP
You may recall that an array arr
is a mountain array if and only if:
arr.length >= 3
- There exists some index
i
(0-indexed) with0 < i < arr.length - 1
such that:arr[0] < arr[1] < ... < arr[i - 1] < arr[i]
arr[i] > arr[i + 1] > ... > arr[arr.length - 1]
Given an integer array arr
, return the length of the longest subarray, which is a mountain. Return 0
if there is no mountain subarray.
Solution
注意到这是连续的序列,所以只需要正向反向遍历更新一遍即可
点击查看代码
class Solution {
private:
int dp1[10003], dp2[10003];
int ans=0;
public:
int longestMountain(vector<int>& arr) {
int n = arr.size();
for(int i=n-2;i>=0;i--){
if(arr[i+1]<arr[i])dp1[i] = dp1[i+1]+1;
}
for(int i=1;i<n;i++){
if(arr[i-1]<arr[i]) dp2[i] = dp2[i-1]+1;
if(dp2[i]&&dp1[i]) ans = max(ans, dp2[i]+dp1[i]-1+2);
}
return ans;
}
};