题目描述:
Given n points in the plane that are all pairwise distinct, a "boomerang" is a tuple of points (i, j, k) such that the distance between i and j equals the distance between i and k (the order of the tuple matters).
Find the number of boomerangs. You may assume that n will be at most 500 and coordinates of points are all in the range [-10000, 10000] (inclusive).
Example:
Input: [[0,0],[1,0],[2,0]]
Output: 2
Explanation:
The two boomerangs are [[1,0],[0,0],[2,0]] and [[1,0],[2,0],[0,0]]
求矩阵中回旋镖的数目,回旋镖的定义为三个点的组合,满足一个点到另外两个点的距离相等。首先需要计算每个点到其他点的距离,如果有n个点到这个点的距离相等,那么就有n*(n-1)个回旋镖。
class Solution {
public:
int numberOfBoomerangs(vector<pair<int, int>>& points) {
int count=0;
for(int i=0;i<points.size();i++)
{
unordered_map<int,int> hash;
for(int j=0;j<points.size();j++)
{
if(i==j) continue;
int distance=pow(points[i].first-points[j].first,2)+pow(points[i].second-points[j].second,2);
if(hash.count(distance)==0) hash[distance]=1;
else hash[distance]++;
}
for(unordered_map<int,int>::iterator it=hash.begin();it!=hash.end();it++)
{
int n=(*it).second;
if(n>=2) count+=n*(n-1);
}
}
return count;
}
};
421

被折叠的 条评论
为什么被折叠?



