Medium
Number of Pairs of Interchangeable Rectangles — C++
Full explanation · Time O(n) · Space O(n)
// Time: O(n)
// Space: O(n)
class Solution {
public:
long long interchangeableRectangles(vector<vector<int>>& rectangles) {
unordered_map<int, unordered_map<int, int>> lookup;
for (const auto& rect : rectangles) {
const int g = gcd(rect[0], rect[1]); // Time: O(logx) ~= O(1)
++lookup[rect[0] / g][rect[1] / g];
}
int64_t result = 0;
for (const auto& [_, kvp] : lookup) {
for (const auto& [_, c] : kvp) {
result += static_cast<int64_t>(c) * (c - 1) / 2;
}
}
return result;
}
};