Max Subsequence

Posted 北叶青藤

tags:

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

一个sequence,里面都是整数,求最长的subsequence的长度,使得这个subsquence的最大值和最小值相差不超过1. 比如[1,3,2,2,5,2,3,7]最长的subsequence是[3,2,2,2,3],所以应该返回5.

分析:

这题可以先排序,然后找出两个相差1的相邻值的最大长度。第二种方法可以用HashMap,保存每个值出现的个数,然后从当前值往下找比当前值大1的数出现的个数。

 1   public int maxSequence(int[] arr) {
 2         if (arr == null || arr.length == 0)
 3             return 0;
 4 
 5         Map<Integer, Integer> map = new HashMap<>();
 6         for (int key : arr) {
 7             map.put(key, map.getOrDefault(key, 0) + 1);
 8         }
 9         int max = 0;
10         for (int key : arr) {
11             max = Math.max(max, map.get(key) + map.getOrDefault(key + 1, 0));
12         }
13         return max;
14     }

 

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

Longest Continuous Increasing Subsequence

寒假 9(max subsequence sum二分递归算法实现并debug,表的链表实现概念过程整理)

Longest Ordered Subsequence

AGC026E - Synchronized Subsequence

Common Subsequence POJ - 1458 最长公共子序列 线性DP

POJ-2533.Longest Ordered Subsequence (LIS模版题)