题意
给定一个序列,求最长锯齿序列的长度,所谓锯齿,就是子序列中不断的增大然后减小或间接的减小然后增大。
分析
一开始是没有啥思路的,感觉应该要使用DP,那么关键就是找到子问题。首先,结果子序列可以是先递减在递增,也可以是先递增再递减,求解的过长都是一样的,假设d[i]为先递减再递增类型序列以第i个位最后一个数的最长子序列长度,f[i]为递增再递减以第i个位置为最后一个数的最长子序列长度,那么就有下面的公式
如果num[i]>num[i-1],那么d[i]=max(d[i],f[i-1]+1);
如果num[i]
代码
class Solution {
public:
int wiggleMaxLength1(vector<int>& nums) {
int n=nums.size();
int d=1,f=1;