题解:
class Solution {
public:
//计算每个点到其他点的距离
int dist(vector<int>& p1,vector<int>& p2){
return (p1[0]-p2[0])*(p1[0]-p2[0])+(p1[1]-p2[1])*(p1[1]-p2[1]);
}
int numberOfBoomerangs(vector<vector<int>>& points) {
// i 和 j 之间的距离和 i 和 k 之间的距离相等
int result = 0;
unordered_map<int,int> m;
for(vector<int> p1:points){
//对每个点清空 统计其他点到p1的距离
m.clear();
for(vector<int> p2:points){
if(p1 == p2){
continue;
}
int d = dist(p1,p2);
if(m.count(d)){
//累加和为n(n+1)/2 取n为n-1 即n*(n-1)/2
result+=m[d];
}
//距离同为d的点+1
m[d]++;
}
}
//j和k可以换位置 乘以2即可 n*(n-1)
return result*2;
}
};