题目
给定平面上 n 对 互不相同 的点 points
,其中 points[i] = [xi, yi]
。回旋镖 是由点 (i, j, k)
表示的元组 ,其中 i 和 j
之间的距离和 i 和 k
之间的距离相等(需要考虑元组的顺序)。
返回平面上所有回旋镖的数量。
题解 哈希 + 暴力枚举
可以用一个哈希表用来存储距离,因为还与顺序有关,可用循环,让每一个结点都充当一次中间位置,记录有多少个结点与它距离相同,因为两端可以调换顺序,还与顺序有关,属于排列问题,加上公式:
完整代码如下:
class Solution {
public:
int numberOfBoomerangs(vector<vector<int>>& points) {
int ans = 0;
for(int i = 0; i < points.size(); ++i){
unordered_map<int, int> cnt;
for(int j = 0; j < points.size(); ++j){
if(i != j){
int distance = (points[j][0] - points[i][0]) * (points[j][0] - points[i][0])
+ (points[j][1] - points[i][1]) * (points[j][1] - points[i][1]);
cnt[distance]++;
}
}
for(auto &p : cnt){
ans += p.second * (p.second - 1);
}
}
return ans;
}
};