问题描述:
Harmonious 序列是一组数,且这一组数中最小的和最大的之差为1. 求给出的数组中最长的H序列
思路:
我一开始想用双指针法,但是没能解决。答案给出了hashmap方法。先用hashmap统计数组中每个元素出现的个数,再在hashmap中搜索一个值,如果存在比这个值大1的值,那么他们可以组成H序列,并求出该序列长度。在hashmap中对每个key做同样的操作,更新最大长度,最终得到最大长度。
代码如下:
class Solution {
public int findLHS(int[] nums) {
Map<Integer, Integer> map =new HashMap<>();
int ans=0;
for(int i=0; i<nums.length; i++){
map.put(nums[i], map.getOrDefault(nums[i],0)+1);
}
for(Integer key: map.keySet()){
if(map.containsKey(key+1)){
ans=Math.max(ans, map.get(key)+map.get(key+1));
}
}
return ans;
}
}
时间复杂度: O(n), n是数组长度