594. 最长和谐子序列(简单)



方法:哈希表计数
思路
- 题目规定的「和谐子序列」中的最值差值正好为 1,因而子序列排序后必然符合
[a,a,.., a +1,a+1]
形式,即符合条件的和谐子序列长度为相邻两数(差值为 1)的出现次数之和。 - 因此,我们首先对 nums 各元素的出现次数计数,之后再次遍历,如果存在比该元素小 1 的元素,说明这两个元素会形成和谐子序列,此时将二者的出现次数相加,即为可能的答案之一。
- 最后,将最佳答案与可能答案相比较,较大者更新为最佳答案。
代码
class Solution {
public:
int findLHS(vector<int>& nums) {
unordered_map<int, int> mp;
int ans = 0;
for (int n : nums){
if(mp.find(n) == mp.end()){
mp.insert({n, 1});
}
else mp[n]++;
}
for(auto m : mp){
if(mp.find(m.first - 1) != mp.end()){
ans = max(ans, m.second + mp[m.first - 1]);
}
}
return ans;
}
};