【LeetCode】594. 最長の高調波部分列

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;
    }
};

おすすめ

転載: blog.csdn.net/weixin_43894455/article/details/131679011