447. Number of Boomerangs
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 i
and 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:
class Solution { public: int numberOfBoomerangs(vector<pair<int, int> >& points) { if(points.size()<3) return 0; int ret=0; for(int i=0;i<points.size();i++) { unordered_map<int,int>hashmap; for(int j=0;j<points.size();j++) { if(j==i) continue; int dis=distance(points[i],points[j]); hashmap[dis]++; } for(auto it=hashmap.begin();it != hashmap.end();it++) { if(it->second>=2) ret += it->second*(it->second-1); } } return ret; } int distance(pair<int, int> &a,pair<int, int> &b) { int x=(a.first-b.first)*(a.first-b.first); int y=(a.second-b.second)*(a.second-b.second); return x+y; } };
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]]