先贴代码
class Solution {
public:
int longestMountain(vector<int>& A) {
vector<int>dp(A.size(),0);
int ans = 0;
for(int i = 1;i < A.size();i++)
{
if(A[i] > A[i-1])
{
if(dp[i-1] >= 0) dp[i] = -2;
else dp[i] = dp[i-1]-1;
}
else if(A[i] < A[i-1])
{
if(dp[i-1] > 0) dp[i] = dp[i-1]+1;
else if(dp[i-1] < 0) dp[i] = -(dp[i-1]-1);
}
ans = max(ans,dp[i]);
}
return ans;
}
};
这道题其实就是个分段函数,我用负数表示上升的山,如果山之前是上升的,现在有下降了,就用整数表示长度,否则一直上升的不是山,记录的长度也一直是个负数。