376. 摆动序列

70 阅读1分钟

376. 摆动序列

最长摆动序列,存在两种情况,需要分别考虑:

  1. 第一项 < 第二项,第二项 > 第三项 .....
  2. 第一项 > 第二项, 第二项 < 第三项 .....
  • 于是这里构建了两个模型,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]);
};