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:
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]]
1、避免重复计算,加上记忆化搜索。
2、A52 = 5 * 4
class Solution {
public:
int numberOfBoomerangs(vector<pair<int, int>>& points)
{
int distance[501][501] = {0}; //类似记忆化搜索
int ret = 0;
for (int i = 0; i < points.size(); i++)
{
map<int, int> mp;
for (int j = 0; j < points.size(); j++)
{
if (i == j) continue;
if (distance[i][j] == 0)
{
distance[i][j] = pow(points[i].first - points[j].first, 2) + pow(points[i].second - points[j].second, 2);
distance[j][i] = distance[i][j];
}
mp[distance[i][j]] ++;
}
for (auto it : mp)
ret += it.second * (it.second - 1);
}
return ret;
}
};