题解 | #不相邻最大子序列和# [P3 - T2]

不相邻最大子序列和

http://www.nowcoder.com/practice/269b4dbd74e540aabd3aa9438208ed8d

JAVA - DP Solution, O(n) time, O(1) space

请输出不相邻最大子序列和

递归逻辑
f(0) = max(array[0], 0);
f(1) = max(array[1], 0);
f(2) = max(array[2], 0) + max(f(0));
f(3) = max(array[3], 0) + max(f(0), f(1));
f(4) = max(array[4], 0) + max(f(0), f(1), f(2));
... ...
f(x) = max(array[x], 0) + max(f(0), ... f(x-2));

可见DP只需要存两个state,一个是走到x为止的max,一个是走到x-2为止的max。

public class Solution {

    public long subsequence (int n, int[] array) {
      if (n == 0) return 0;
      
      long max = Math.max(array[0], 0);
      long max_lag2 = 0;
      
      for (int i = 1; i < n; i++) {
        long cur = Math.max(array[i], 0) + max_lag2;
        
        // 此时max还是i-1时的值
        // i.e. i+1用的max_lag2对应i-1的max
        max_lag2 = max;
        max = Math.max(cur, max);
      }
      
      return max;
    }
}
DP是真的烦 文章被收录于专栏

只是为了把DP的题集中一下方便自己复习

全部评论

相关推荐

09-21 21:14
门头沟学院
否极泰来来来来:和他说:这里不好骂你,我们加个微信聊
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务