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;
}
}