问题描述:
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 iand 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;
}
};
计算平面内回旋镖数量

本文介绍了一种算法,用于计算平面上给定点集内的回旋镖数量。通过使用哈希表记录每个点与其他点间距离出现的次数,进而计算出符合条件的回旋镖组合。适用于坐标范围为[-10000,10000]的点集,最多支持500个点。
1万+

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



