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     }

 

posted @ 2016-11-22 00:52  北叶青藤  阅读(378)  评论(0编辑  收藏  举报