1.主題の出典
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;
}
};