594. 最長高調波部分列 (単純)
メソッド: ハッシュ テーブルの数
アイデア
- 質問で指定された「調和部分列」の最大差はちょうど 1 であるため、部分列は
[a,a,.., a +1,a+1]
ソート後の形式に準拠する必要があります。つまり、条件を満たす調和部分列の長さは、隣接する 2 つの数値の出現数です。 (差は 1)と。
- そこで、まず nums の各要素の出現回数を数え、その要素より 1 少ない要素があれば、その 2 つの要素が調和した部分列を形成していることを意味します。 2 つの要素の回数が加算されます。これは、考えられる答えの 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;
}
};