Wiggle Subsequence

MediumArrayDynamic ProgrammingGreedy

Solution

export function wiggleMaxLength(nums: number[]): number {
  if (nums.length < 2) {
    return nums.length;
  }
 
  let answer = 1;
  let direction: -1 | 0 | 1 = 0;
  for (let i = 0; i < nums.length - 1; i++) {
    const diff = nums[i + 1] - nums[i];
    if (diff < 0 && direction <= 0) {
      direction = 1;
      answer += 1;
    }
    if (0 < diff && 0 <= direction) {
      direction = -1;
      answer += 1;
    }
  }
 
  return answer;
}