力扣刷题376. 摆动序列
376. 摆动序列 - 力扣(LeetCode)
定义两个动态规划数组,一个记录上升的dp,一个记录下降的dp
如果后一位数大于前一位数,则有
dpUp[i] = dpDown[i - 1] + 1; dpDown[i] = dpDown[i - 1];
如果后一位数小于前一位数,则有
dpUp[i] = dpUp[i - 1] ; dpDown[i] = dpUp[i - 1]+ 1;
如果相等,则dp[i] = dp[i-1]
package LeetCode;
public class Q376 {
public static void main(String[] args) {
int[] nums = {1, 7, 4, 9, 2, 5};
System.out.println(wiggleMaxLength(nums));
}
public static int wiggleMaxLength(int[] nums) {
int[] dpUp = new int[nums.length];
int[] dpDown = new int[nums.length];
dpUp[0] = 1;
dpDown[0] = 1;
for (int i = 1; i < nums.length; i++) {
if (nums[i] - nums[i - 1] == 0) {
dpUp[i] = dpUp[i - 1];
dpDown[i] = dpDown[i - 1];
} else if (nums[i] - nums[i - 1] > 0) {
dpUp[i] = dpDown[i - 1] + 1;
dpDown[i] = dpDown[i - 1];
} else {
dpUp[i] = dpUp[i - 1] ;
dpDown[i] = dpUp[i - 1]+ 1;
}
}
return Math.max(dpUp[dpUp.length-1],dpDown[dpDown.length-1]);
}
}