在平面中给定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]]
思路:回旋镖是相对于三个点来说,所以找出所有点对于一个点的距离,如果有两个或两个以上相等则可以构成回旋镖,此时回旋镖个数等于相等距离个数*(相等距离个数-1),把所有情况相加即为答案
class Solution {
public:
/**
* @param points: a 2D array
* @return: the number of boomerangs
*/
int getDis(vector<int> &a, vector<int> &b){
int x = b[0] - a[0];
int y = b[1] - a[1];
return x * x + y * y;
}
int numberOfBoomerangs(vector<vector<int>> &points) {
// Write your code here
int len1=points.size();
int len2=points[0].size();
int result=0;
for (int i = 0; i < len1; i++) {
/* code */
map<int,int> temp;
for(int j=0;j<len1;j++)
{
if(i!=j)
{
int dis=getDis(points[i],points[j]);
++temp[dis];
}
}
for (auto a : temp) {
/* code */
if(a.second>1)
{
result+=a.second*(a.second-1);
}
}
}
return result;
}
};