A sequence of numbers is called a wiggle sequence if 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 fewer than two elements is trivially a wiggle sequence.
For example, [1,7,4,9,2,5] is a wiggle sequence because the differences (6,-3,5,-7,3) are alternately positive and negative. In contrast, [1,4,7,2,5] and [1,7,4,5,5] are not wiggle sequences, the first because its first two differences are positive and the second because its last difference is zero.
Given a sequence of integers, return the length of the longest subsequence that is a wiggle sequence. A subsequence is obtained by deleting some number of elements (eventually, also zero) from the original sequence, leaving the remaining elements in their original order.
Examples:
解法1:两次dp
两次dp的思想很巧妙,用up和down两个数组记录到当前位置,最后相邻的两个是up的最长wiggle sequence或者是最后相邻两个是down的最长wiggle sequence。
那么只要交替更新一下每一个dp array就可以了。
似乎这和minmax类的题目很类似, 比如Predict the winner,也是用两个相互影响的dp数组来完成。
C++
Java