xinyu04

导航

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) with 0 < i < arr.length - 1such 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;
    }
};

posted on 2022-05-24 22:30  Blackzxy  阅读(15)  评论(0编辑  收藏  举报