题意:在一堆点中找符合条件的点的总组数:每组点共有三个,且第一个点到第二个点和到第三个点的距离相同。点的顺序不同表示不同的组数。
解题:用一个map记录遍历的该点point1的信息,key表示该点到另外点point2的距离,value表示距离point1的距离为key的点的个数。 则若有k个点到point1的距离相等,且k>1,那么从中有顺序的任选2个点的组合数为k*(k-1)。ans表示所有的可能解,也就是最终结果。
class Solution {
public:
int numberOfBoomerangs(vector<pair<int, int>>& points) {
int ans = 0;
for (int i = 0; i < points.size(); ++i) {
map<long, int> dis;
for (int j = 0; j < points.size(); ++j) {
if (i == j)
continue;
long disPoint = 0;
disPoint += (points[i].first-points[j].first) * (points[i].first-points[j].first);
disPoint += (points[i].second - points[j].second) * (points[i].second - points[j].second);
++dis[disPoint];
}
for (map<long,int>::iterator iter = dis.begin(); iter != dis.end(); ++iter) {
int k = iter->second;
if (k > 1)
ans += k * (k-1);
}
}
return ans;
}
};