[LeetCode]594. 最长和谐子序列(java实现)
1. 题目
2. 读题(需要重点注意的东西)
解法1:首先能想到一个解法是暴力法,即用暴力循环;时间复杂度为O(n2)
解法2:使用哈希表。主要思路是用哈希表存储每个数出现的次数,再求相邻数的数量和,取最大的数量和即可。由于哈希表查找元素的时间复杂度为O(1),因此在查找数据的问题中有很好的作用。时间复杂度为O(n)。
3. 解法
解法2:
class Solution {
// 将各个数出现的次数存放在哈希表中
// 查找相邻数字出现次数的和的最大值
public int findLHS(int[] nums) {
int max = 0;
Map<Integer,Integer> hashmap = new HashMap<>();
for(int i = 0 ; i < nums.length ; i++){
if(hashmap.containsKey(nums[i])){
hashmap.put(nums[i],hashmap.get(nums[i])+1);
}else{
hashmap.put(nums[i],1);
}
}
// System.out.println(hashmap);
for(int j = 0 ; j < nums.length ; j++){
if(hashmap.containsKey(nums[j]+1)){
max = Math.max(max,hashmap.get(nums[j])+hashmap.get(nums[j]+1));
}
}
return max;
}
}