先貼代碼
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;
}
};
這道題其實就是個分段函數,我用負數表示上升的山,如果山之前是上升的,現在有下降了,就用整數表示長度,否則一直上升的不是山,記錄的長度也一直是個負數。