[Mユニオンチェックセット] lc1722。交換操作実行後の最小ハミング距離(ユニオンチェックセット+ハッシュ+ウィークリーコンテスト223_3)

記事のディレクトリ

1.主題の出典

リンク:1722。交換操作を実行した後の最小ハミング距離

2.トピック分析

接続されたブロックをチェックして維持するだけです。試験室では完全とは見なされませんでした。アイデアを推測して書いてください。ツリー接続の場合は、次数1のポイントから検討し、そのポイントが削除されていることを確認し、次数1のポイントを検討する必要があります。
ここに画像の説明を挿入します


  • 時間計算量O(n)O(n)O n
  • スペースの複雑さO(n)O(n)O n

コード:

class Solution {
    
    
public:
    vector<int> p;

    int find(int x) {
    
    
        if (p[x] != x) p[x] = find(p[x]);
        return p[x];
    }

    int minimumHammingDistance(vector<int>& a, vector<int>& b, vector<vector<int>>& as) {
    
    
        int n = a.size();
        for (int i = 0; i < n; i ++ ) p.push_back(i);
        for (auto &t : as) p[find(t[0])] = find(t[1]);      

        vector<unordered_multiset<int>> hash(n);
        for (int i = 0; i < n; i ++ ) 
            hash[find(i)].insert(a[i]);
        int res = 0;
        for (int i = 0; i < n; i ++ ) {
    
    
            auto &h = hash[find(i)];      // 寻找b[i]这个点所在连通块的集合
            if (h.count(b[i])) h.erase(h.find(b[i]));
            else res ++ ;
        }
        return res;
    }
};

おすすめ

転載: blog.csdn.net/yl_puyu/article/details/112722898