Skip to content

Commit b78a464

Browse files
authored
Update maximum-hamming-distances.cpp
1 parent f17b9d8 commit b78a464

File tree

1 file changed

+11
-14
lines changed

1 file changed

+11
-14
lines changed

C++/maximum-hamming-distances.cpp

Lines changed: 11 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -32,36 +32,33 @@ class Solution {
3232
class Solution2 {
3333
public:
3434
vector<int> maxHammingDistances(vector<int>& nums, int m) {
35-
vector<vector<int>> group(1 << m);
36-
for (int i = 0; i < size(nums); ++i) {
37-
group[((1 << m) - 1) ^ nums[i]].emplace_back(i);
38-
}
39-
vector<int> result(size(nums));
4035
vector<int> q;
41-
vector<int> lookup(1 << m);
36+
vector<int> dist(1 << m, -1);
4237
for (const auto& x : nums) {
43-
if (lookup[x]) {
38+
if (dist[x] != -1) {
4439
continue;
4540
}
46-
lookup[x] = true;
41+
dist[x] = 0;
4742
q.emplace_back(x);
4843
}
49-
for (int d = 0; !empty(q); ++d) {
44+
for (int d = 0; !empty(q);) {
45+
++d;
5046
vector<int> new_q;
5147
for (const auto& u : q) {
52-
for (const auto& i : group[u]) {
53-
result[i] = m - d;
54-
}
5548
for (int i = 0; i < m; ++i) {
56-
if (lookup[u ^ (1 << i)]) {
49+
if (dist[u ^ (1 << i)] != -1) {
5750
continue;
5851
}
59-
lookup[u ^ (1 << i)] = true;
52+
dist[u ^ (1 << i)] = d;
6053
new_q.emplace_back(u ^ (1 << i));
6154
}
6255
}
6356
q = move(new_q);
6457
}
58+
vector<int> result(size(nums));
59+
for (int i = 0; i < size(nums); ++i) {
60+
result[i] = m - dist[((1 << m) - 1) ^ nums[i]];
61+
}
6562
return result;
6663
}
6764
};

0 commit comments

Comments
 (0)