题目描述: 回旋镖的数量
给定平面上 n 对不同的点,“回旋镖” 是由点表示的元组 (i, j, k)
,其中 i
和 j
之间的距离和 i
和 k
之间的距离相等(需要考虑元组的顺序)。
找到所有回旋镖的数量。你可以假设 n 最大为 500,所有点的坐标在闭区间 [-10000, 10000] 中。
示例:
输入: [[0,0],[1,0],[2,0]] 输出: 2 解释: 两个回旋镖为 [[1,0],[0,0],[2,0]] 和 [[1,0],[2,0],[0,0]]
解题思路:
暴力算出所有的两点之间的距离,
对于一个点a,有n个点到点a的距离相等,则对a来说有n*(n-1)个回旋镖(多看几个就找出规律了)
代码:
class Solution {
public:
int numberOfBoomerangs(vector<pair<int, int>>& points) {
int ans = 0;
for(int i = 0;i < points.size(); i ++){
map<int, int> m;
for(int j = 0; j < points.size(); j ++){
if(i == j) continue;
int d = (points[i].first-points[j].first)*(points[i].first-points[j].first)+(points[i].second-points[j].second)*(points[i].second-points[j].second);
m[d]++;
}
map<int, int>::iterator mi;
for(mi = m.begin(); mi != m.end(); mi ++){
ans += mi->second*(mi->second-1);
}
}
return ans;
}
};