-
Medium
-
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 ofnums
. - For example,
Below is a DP solution, using high to represent the wiggle sequence to the point with the last one element ending in the higher place.
class Solution:
def wiggleMaxLength(self, nums: List[int]) -> int:
n = len(nums)
dpLow = [1] * n
dpHigh = [1] * n
for i in range(1, n):
for j in range(i):
if nums[i] > nums[j] and dpHigh[i] < dpLow[j] + 1:
dpHigh[i] = dpLow[j] + 1
elif nums[i] < nums[j] and dpLow[i] < dpHigh[j] + 1:
dpLow[i] = dpHigh[j] + 1
return max(dpHigh[n-1], dpLow[n-1])