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 }