[LeetCode]594.Longest Harmonious Subsequence

来源:互联网 发布:centos关闭iptables 编辑:程序博客网 时间:2024/06/09 18:40

题目大意:点击打开链接

思路:将数组每个元素和它出现的次数放入HashMap<Integer,Integer>

           然后在keySet()里判断,每个key和比它大一的key+1出现次数之和,但前提得有key+1

注意:题目要求是最大最小之差exactly 1,因此如果给定数组[1,1,1,1]或者[1,3,5,7]就没有符合条件的result,result=0

public class Solution {    public int findLHS(int[] nums) {        if(nums==null || nums.length==0){            return 0;        }                Map<Integer,Integer> map=new HashMap<>();        for(int num:nums){            map.put(num,map.getOrDefault(num,0)+1);        }                int result=0;                                                //result初始值为0的重要性        for(int key:map.keySet()){            if(map.containsKey(key+1)){                result=Math.max(result,map.get(key)+map.get(key+1));            }        }        return result;    }}

public class Solution {    public int findLHS(int[] nums) {                                 //错误做法        if(nums==null || nums.length==0){            return 0;        }                Map<Integer,Integer> map=new HashMap<>();        for(int num:nums){            map.put(num,map.getOrDefault(num,0)+1);                  //原因:[2,3,2,2,2]            if(map.containsKey(num+1)){                              //当遍历到第二个,第三个,第四个2时都会在次数上累加1                    map.put(num,map.get(num)+1);            }        }                int result=0;        for(Map.Entry<Integer,Integer> e:map.entrySet()){            result=Math.max(result,e.getValue());        }        return result;    }}

原创粉丝点击