Medium
Number of Black Blocks — C++
Full explanation · Time O(c) · Space O(c)
// Time: O(c), c = len(coordinates)
// Space: O(c)
// freq table
class Solution {
public:
vector<long long> countBlackBlocks(int m, int n, vector<vector<int>>& coordinates) {
static const int L = 2;
unordered_map<int64_t, int> cnt;
for (const auto& c : coordinates) {
const int x = c[0], y = c[1];
for (int nx = max(x - (L - 1), 0); nx < min(x + 1, m - (L - 1)); ++nx) {
for (int ny = max(y - (L - 1), 0); ny < min(y + 1, n - (L - 1)); ++ny) {
++cnt[static_cast<int64_t>(nx) * n + ny];
}
}
}
vector<long long> result(L * L + 1);
for (const auto& [_, c] : cnt) {
++result[c];
}
result[0] = static_cast<int64_t>(m - (L - 1)) * (n - (L - 1)) - accumulate(cbegin(result) + 1, cend(result), 0ll);
return result;
}
};