LeetCode 376. 摆动序列
解题思路
时间复杂度并不理想,没有想到使用波峰,波谷的o(n)算法。
这个dp也还勉强可以通过。
思路就是先计算出差值,然后对差值数组进行dp即可。
代码
class Solution {
public:
int wiggleMaxLength(vector<int>& nums) {
int n=nums.size();
if(n==0) return 0;
if(n==1) return 1;
int a[n+3];
int dp[n+3];
for(int i=1;i<n;i++)
{
a[i]=nums[i]-nums[i-1];
}
dp[0]=0;
for(int i=1;i<n;i++)
{
if(a[i]==0) dp[i]=0;
else
{
dp[i]=1;
}
}
int M=-99999;
for(int i=1;i<n;i++)
{
for(int j=1;j<i;j++)
{
if(a[i]*a[j]<0)
{
dp[i]=max(dp[j]+1,dp[i]);
}
}
M=max(M,dp[i]);
}
//if(M==0) return 0;
return M+1;
}
};
还没有评论,来说两句吧...