题目描述:
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).
思路一:
对每个点,有个HashMap,key为距离,value为点数。boomerangs的个数为value*(value-1)。
时间复杂度为O(N^2)。
class Solution {
public int numberOfBoomerangs(int[][] points) {
int res = 0;
HashMap<Integer, Integer> map = new HashMap<>();
for (int i = 0; i < points.length; i++)
{
for (int j = 0; j < points.length; j++)
{
if (i == j) continue;
int dis = getDistance(points[i], points[j]);
map.put(dis, map.getOrDefault(dis, 0) + 1);
}
for (int num : map.values())
res += num * (num - 1);
map.clear();
}
return res;
}
private int getDistance(int[] num1, int[] num2)
{
return (num1[0] - num2[0]) * (num1[0] - num2[0]) + (num1[1] - num2[1]) * (num1[1] - num2[1]);
}
}
本文介绍了一种高效算法,用于找出平面上给定点集中所有符合特定距离条件的三元组,即所谓的“回旋镖”。该算法使用HashMap来记录每个点到其它点的距离及出现次数,最终统计出所有可能的回旋镖组合。
426

被折叠的 条评论
为什么被折叠?



