cocobear9  
一枚普通的zisuer(lll¬ω¬),努力每天多学一点点

和谐数组是指一个数组里元素的最大值和最小值之间的差别正好是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;
    }

 

posted on 2020-05-12 15:25  cocobear9  阅读(160)  评论(0)    收藏  举报