【LeetCode】第25天 - 594. 最长和谐子序列

594. 最长和谐子序列

题目描述

【LeetCode】第25天 - 594. 最长和谐子序列

解题思路

可以利用哈希表来储存每个元素及每个元素出现的次数,key为元素值,value为元素出现的次数。

  • 首先遍历数组,统计元素的出现次数并存储在哈希表中;
  • 然后遍历哈希表,统计相邻元素值出现次数(即满足|key1-key2|=1),那么当前最长和谐子序列为value1 + value2与前一组最长和谐组序列的较大值。

代码实现

class Solution {
    public int findLHS(int[] nums) {
        Map<Integer,Integer> map = new HashMap<Integer,Integer>();
        for(int i=0;i<nums.length;i++){
            //统计各元素值的出现次数
            //getOrDefault(key,default):当 Map 集合中有这个 key 时,就使用这个 key对应的value值;如果没有就使用默认值 default
            map.put(nums[i],map.getOrDefault(nums[i],0) + 1);
        }

        int maxLength = 0;
        for(int key : map.keySet()){
            if(map.containsKey(key + 1)){       //如果存在相差为1的元素,计算出现次数和
                maxLength = Math.max(maxLength,map.get(key) + map.get(key+1));
            }
        }

        return maxLength;
    }
}
上一篇:力扣刷题百天计划 Day3


下一篇:687. 最长同值路径