题目:
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]]
思路:
对于每个点,计算出来它和其它所有点的距离。对于每个距离,假设有m个点,则可以构成m * (m - 1)个Boomerangs,返回所有结果之和即可。思路挺简单。
代码:
class Solution {
public:
int numberOfBoomerangs(vector<pair<int, int>>& points) {
int ret = 0;
for(int i = 0; i < points.size(); ++i) {
unordered_map<long, int> hash;
for(int j = 0; j < points.size(); ++j) {
if(j == i) {
continue;
}
long dist = (points[i].first - points[j].first) * (points[i].first - points[j].first);
dist += (points[i].second - points[j].second) * (points[i].second - points[j].second);
++hash[dist];
}
for(auto val : hash) {
ret += val.second * (val.second - 1);
}
}
return ret;
}
};
本文介绍了一种计算平面上特定几何结构——Boomerang的数量的方法。Boomerang定义为由三个点组成的元组,其中两个点到第三个点的距离相等。通过计算每一点与其他点之间的距离并统计相同距离出现的次数,最终得出Boomerang的总数。
393

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



