想到Best Time to Buy and Sell Stock with Cooldown这个题的做法,建立两个数组,一个叫increase[],另一个叫decrease[],increase[i]表示nums[i]比前一个数字大的情况下的最长序列,decrease[i]表示nums[i]比前一个数字小的最长序列,两个数组取最长的就可以。
class Solution {
public:
int wiggleMaxLength(vector<int>& nums) {
int n = nums.size();
vector<int> increase(n, 1);
vector<int> decrease(n, 1);
if(n <= 1)
return n;
increase[0] = 1;
decrease[0] = 1;
for(int i = 1; i < n; ++i)
{
for(int j = i; j >= 0; --j)
{
if(nums[i] > nums[j])
increase[i] = max(increase[i], decrease[j] + 1);
if(nums[i] < nums[j])
decrease[i] = max(decrease[i], increase[j] + 1);
}
}
return max(increase.back(), decrease.back());
}
};