最长摆动序列,存在两种情况,需要分别考虑:
- 第一项 < 第二项,第二项 > 第三项 .....
- 第一项 > 第二项, 第二项 < 第三项 .....
- 于是这里构建了两个模型,
var up = new Array(n).fill(0);和var down = new Array(n).fill(0); up[i] = Math.max(up[i - 1], down[i - 1] + 1);up 和 down存在相互利用的关系down[i] = Math.max(up[i - 1] + 1, down[i - 1]);
var wiggleMaxLength = function (nums) {
var n = nums.length;
if (n < 2) return n;
var up = new Array(n).fill(0);
var down = new Array(n).fill(0);
up[0] = down[0] = 1;
for (var i = 1; i < n; i++) {
if (nums[i] > nums[i - 1]) {
down[i] = down[i - 1];
up[i] = Math.max(up[i - 1], down[i - 1] + 1);
} else if (nums[i] < nums[i - 1]) {
up[i] = up[i - 1];
down[i] = Math.max(up[i - 1] + 1, down[i - 1]);
} else {
up[i] = up[i - 1];
down[i] = down[i - 1];
}
}
return Math.max(up[n - 1], down[n - 1]);
};