给定平面上 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]]C++
class Solution { public: int numberOfBoomerangs(vector<pair<int, int>>& points) { int n=points.size(); if(n<3) { return 0; } unordered_map<int,int> res; int dis; int ans=0; for(int i=0;i<n;i++) { for(int j=0;j!=i,j<n;j++) { dis=pow(points[i].first-points[j].first,2)+pow(points[i].second-points[j].second,2); res[dis]++; } //for(auto element:res[i]) //for(auto element:res) //{ // ans+=element.second*(element.second-1); //} unordered_map<int,int>::iterator it; for(it=res.begin();it!=res.end();it++) { ans+=it->second*(it->second-1); } res.clear(); } return ans; } };python
class Solution: def numberOfBoomerangs(self, points): """ :type points: List[List[int]] :rtype: int """ n=len(points) if n<3: return 0 dic={} ans=0 for i in range(n): for j in range(n): if j!=i: dis=(points[i][0]-points[j][0])**2+(points[i][1]-points[j][1])**2 if dis not in dic: dic[dis]=1 else: dic[dis]+=1 for key in dic: ans+=dic[key]*(dic[key]-1) dic.clear() return ans