和谐数组是指一个数组里元素的最大值和最小值之间的差别正好是1。
现在,给定一个整数数组,你需要在所有可能的子序列中找到最长的和谐子序列的长度。
示例 1:
输入: [1,3,2,2,5,2,3,7]
输出: 5
原因: 最长的和谐数组是:[3,2,2,2,3].
链接:https://leetcode-cn.com/problems/longest-harmonious-subsequence
值得提及的一个map中的方法。V default map.getOrDefault(Object key,V defaultValue)
当map中有这个key的话,调用这个方法会返回在map中对应的value
当map中没有这个key,调用这个方法会返回默认的defaultValue
public static int findLHS1(int[] nums) { HashMap<Integer,Integer> map = new HashMap<>(); int res = 0; for(int num:nums) { map.put(num, map.getOrDefault(num, 0)+1); } for(int key:map.keySet()) { if(map.containsKey(key+1)) { res =Math.max(res, map.get(key)+map.get(key+1)); } } return res; }
下面是我自己的代码思路差不多就是不够简洁
public static int findLHS(int[] arr) { int maxlen=0; Arrays.sort(arr);//先给数组排序-->1 2 2 2 3 3 5 7 ArrayList<Integer> list = new ArrayList<>(); Map<Integer,Integer> map = new HashMap<>(); for(int i=0;i<arr.length;i++) { if(!map.containsKey(arr[i])) { map.put(arr[i], 1); list.add(arr[i]); } else { Integer count = map.get(arr[i]); map.put(arr[i], ++count); } } System.out.println("list集合:"+list); System.out.println("map集合:"+map); for(int i=1;i<list.size();i++) { int curr = list.get(i); int pre = list.get(i-1); if(curr == pre+1) { int len =map.get(curr)+map.get(pre); if(len>maxlen) { maxlen = len ; } } } return maxlen; }

浙公网安备 33010602011771号