问题描述:
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]]
思路:使用hashtable首先计算出每一个左边点与其余所有坐标之间的距离,并对其按照距离大小进行归类,存入hashtable,最后计算回旋点=n*n-1(n为对应距离下的点的个数)
class Solution {
public:
int numberOfBoomerangs(vector<pair<int, int>>& points) {
int res=0;
for(auto &p : points)
{
unordered_map<int,int> cache(points.size());
for(auto &q : points)
{
cache[pow(p.first-q.first,2)+pow(p.second-q.second,2)]++;
}
for(auto &m : cache)
res+=m.second*(m.second-1);
}
return res;
}
};