Number of Boomerangs
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]]解析:对每个点求到其他每个点的距离,并把距离放在一个hash中计数,若点i到某些点(k个)的距离相同,则以第i个点为中心点的tuple为k*(k-1)。
代码:
class Solution {
public:
int numberOfBoomerangs(vector<pair<int, int>>& points) {
int N=points.size();
unordered_map<double,int> dist;
int ans=0;
for (int i=0; i<N; i++)
{
dist.clear();
for (int j=0; j<N; j++)
{
dist[sqrt(pow(abs(points[i].first-points[j].first),2)+pow(abs(points[i].second-points[j].second),2))]++;
}
for(auto iter = dist.begin(); iter != dist.end(); iter++)
{
ans+=((iter->second)*(iter->second-1));
}
}
return ans;
}
};