leetcode 376Wiggle Subsequence

Posted hwd9654

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leetcode 376Wiggle Subsequence相关的知识,希望对你有一定的参考价值。

用dp解

1)up定义为nums[i-1] < nums[i]

  down nums[i-1] > nums[i]

  两个dp数组,

  up[i],记录包含nums[i]且nums[i-1] < nums[i]的最长子序列长度

  down[], 记录包含nums[i]nums[i-1] > nums[i]的最长子序列长度

 

2)更新方程

  有三种情况 nums[i-1] <or=or> nums[i]

  a) up[i] = down[i-1] + 1;

   down[i] = down[i-1]

  b) up[i] = up[i-1]

   down[i] = down[i-1]

  c) up[i] = up[i-1]

   down[i] = up[i-1] + 1;

 

 1 class Solution {
 2     public int wiggleMaxLength(int[] nums) {
 3         if(nums == null || nums.length == 0)
 4             return 0;
 5         int len = nums.length;
 6         int[] up = new int[len];
 7         int[] down = new int[len];
 8         int res = 1;
 9         
10         up[0] = 1;
11         down[0] = 1;
12         
13         for(int i=1; i<len; i++){
14             if(nums[i] > nums[i-1]){
15                 up[i] = down[i-1] + 1;
16                 down[i] = down[i-1];
17             }else if(nums[i] < nums[i-1]){
18                 up[i] = up[i-1];
19                 down[i] = up[i-1] + 1;
20             }else{
21                 up[i] = up[i-1];
22                 down[i] = down[i-1];
23             }
24             
25             res = Math.max(res, Math.max(up[i], down[i]));
26         }
27         
28         return res;
29         
30     }
31 }

 

以上是关于leetcode 376Wiggle Subsequence的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode 376. Wiggle Subsequence

Leetcode376. Wiggle Subsequence

***Leetcode 376. Wiggle Subsequence

LeetCode.376 - Wiggle Subsequence

LeetCode 376. Wiggle Subsequence 摆动子序列

leetcode 376Wiggle Subsequence