class Solution:
def wiggleMaxLength(self, nums):
if not nums:
return 0
up = down = 1
for i in range(1, len(nums)):
if nums[i] > nums[i-1]:
up = down + 1
elif nums[i] < nums[i-1]:
down = up + 1
return max(up, down)
class Solution {
public:
int wiggleMaxLength(vector<int>& nums) {
if (nums.empty()) return 0;
int up = 1, down = 1;
for (int i = 1; i < nums.size(); ++i) {
if (nums[i] > nums[i-1])
up = down + 1;
else if (nums[i] < nums[i-1])
down = up + 1;
}
return max(up, down);
}
};
class Solution {
public int wiggleMaxLength(int[] nums) {
if (nums.length == 0) return 0;
int up = 1, down = 1;
for (int i = 1; i < nums.length; i++) {
if (nums[i] > nums[i-1]) {
up = down + 1;
} else if (nums[i] < nums[i-1]) {
down = up + 1;
}
}
return Math.max(up, down);
}
}
var wiggleMaxLength = function(nums) {
if (!nums.length) return 0;
let up = 1, down = 1;
for (let i = 1; i < nums.length; i++) {
if (nums[i] > nums[i-1]) {
up = down + 1;
} else if (nums[i] < nums[i-1]) {
down = up + 1;
}
}
return Math.max(up, down);
};
nums
, find the length of the longest subsequence that is a wiggle sequence. 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 single element is trivially a wiggle sequence of length 1.
up
and down
, both to 1. These represent the longest wiggle subsequence ending with an upward or downward difference, respectively.nums[i]
> nums[i-1]
, it means we can extend a sequence that previously ended with a "down", so set up = down + 1
.nums[i]
< nums[i-1]
, we can extend a sequence that previously ended with an "up", so set down = up + 1
.nums[i]
== nums[i-1]
, do nothing (no wiggle).up
and down
.nums = [1, 7, 4, 9, 2, 5]
:
up = 1
, down = 1
up = down + 1 = 2
down = up + 1 = 3
up = down + 1 = 4
down = up + 1 = 5
up = down + 1 = 6
up
and down
).