返回介绍

solution / 0300-0399 / 0376.Wiggle Subsequence / README_EN

发布于 2024-06-17 01:04:01 字数 4330 浏览 0 评论 0 收藏 0

376. Wiggle Subsequence

中文文档

Description

A wiggle sequence is a sequence where the differences between successive numbers strictly alternate between positive and negative. The first difference (if one exists) may be either positive or negative. A sequence with one element and a sequence with two non-equal elements are trivially wiggle sequences.

  • For example, [1, 7, 4, 9, 2, 5] is a wiggle sequence because the differences (6, -3, 5, -7, 3) alternate between positive and negative.
  • In contrast, [1, 4, 7, 2, 5] and [1, 7, 4, 5, 5] are not wiggle sequences. The first is not because its first two differences are positive, and the second is not because its last difference is zero.

A subsequence is obtained by deleting some elements (possibly zero) from the original sequence, leaving the remaining elements in their original order.

Given an integer array nums, return _the length of the longest wiggle subsequence of _nums.

 

Example 1:

Input: nums = [1,7,4,9,2,5]
Output: 6
Explanation: The entire sequence is a wiggle sequence with differences (6, -3, 5, -7, 3).

Example 2:

Input: nums = [1,17,5,10,13,15,10,5,16,8]
Output: 7
Explanation: There are several subsequences that achieve this length.
One is [1, 17, 10, 13, 10, 16, 8] with differences (16, -7, 3, -3, 6, -8).

Example 3:

Input: nums = [1,2,3,4,5,6,7,8,9]
Output: 2

 

Constraints:

  • 1 <= nums.length <= 1000
  • 0 <= nums[i] <= 1000

 

Follow up: Could you solve this in O(n) time?

Solutions

Solution 1

class Solution:
  def wiggleMaxLength(self, nums: List[int]) -> int:
    up = down = 1
    for i in range(1, len(nums)):
      if nums[i] > nums[i - 1]:
        up = max(up, down + 1)
      elif nums[i] < nums[i - 1]:
        down = max(down, up + 1)
    return max(up, down)
class Solution {
  public int wiggleMaxLength(int[] nums) {
    int up = 1, down = 1;
    for (int i = 1; i < nums.length; ++i) {
      if (nums[i] > nums[i - 1]) {
        up = Math.max(up, down + 1);
      } else if (nums[i] < nums[i - 1]) {
        down = Math.max(down, up + 1);
      }
    }
    return Math.max(up, down);
  }
}
class Solution {
public:
  int wiggleMaxLength(vector<int>& nums) {
    int up = 1, down = 1;
    for (int i = 1; i < nums.size(); ++i) {
      if (nums[i] > nums[i - 1]) {
        up = max(up, down + 1);
      } else if (nums[i] < nums[i - 1]) {
        down = max(down, up + 1);
      }
    }
    return max(up, down);
  }
};
func wiggleMaxLength(nums []int) int {
  up, down := 1, 1
  for i := 1; i < len(nums); i++ {
    if nums[i] > nums[i-1] {
      up = max(up, down+1)
    } else if nums[i] < nums[i-1] {
      down = max(down, up+1)
    }
  }
  return max(up, down)
}
function wiggleMaxLength(nums: number[]): number {
  let up = 1,
    down = 1;
  for (let i = 1; i < nums.length; ++i) {
    let prev = nums[i - 1],
      cur = nums[i];
    if (cur > prev) {
      up = Math.max(up, down + 1);
    } else if (cur < prev) {
      down = Math.max(down, up + 1);
    }
  }
  return Math.max(up, down);
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文