和谐数组是指一个数组里元素的最大值和最小值之间的差别 正好是 1 。 现在,给你一个整数数组 nums ,请你在所有可能的子序列中找到最长的和谐子序列的长度。 可以通过删除一些元素或不删除元素、且不改变其余元素的顺序而得到。 示例 1: 输入:nums = [1,3,2,2,5,2,3,7] 输出:5 解释:最长的和谐子序列是 [3,2,2,2,3] 示例 2: 输入:nums = [1,2,3,4] 输出:2 示例 3: 输入:nums = [1,1,1,1] 输出:0
class Solution {
public int findLHS(int[] nums) {
/**
哈希表解法
把所有元素存入
定义最小值
遍历数组,看有灭有 当前元素+1 在表里面
有的话 更新下res
*/
HashMap<Integer,Integer> map=new HashMap();
//把所有元素 ,和他出现的次数 填入
for(int i:nums){
if(!map.containsKey(i)){
map.put(i,1);
}
else{
map.put(i,map.get(i)+1);
}
}
//定义最小长度
int res=0;
//遍历数组
for(int i:nums){
if(map.containsKey(i+1)){
//如果包含下一个元素 , 更新下最小长度
res=Math.max(res,map.get(i)+map.get(i+1));
}
}
return res;
}
}