2024-1-8
p1
,以该点为起始点,计算与其他点的距离,统计距离相等的点对数。getOrDefault
方法获取当前距离平方在 哈希表 中出现的次数。如果没有出现过,则默认为 0。ans
加上当前距离平方出现次数的两倍。最后,将当前距离平方的出现次数加 1,更新 cnt
class Solution {
public int numberOfBoomerangs(int[][] points) {
int ans = 0;
// 在外面 new,比在内层循环 new 效率更高
HashMap<Integer, Integer> cnt = new HashMap<>();
// 遍历每个点,以该点为起始点,计算与其他点的距离,统计距离相等的点对数
for (int[] p1 : points) {
// 每次遍历新的起始点,需要清空之前存储的距离和出现次数
cnt.clear();
for (int[] p2 : points) {
// 计算两点间距离的平方
int d2 = (p1[0] - p2[0]) * (p1[0] - p2[0]) + (p1[1] - p2[1]) * (p1[1] - p2[1]);
// 统计距离相等的点对数
int c = cnt.getOrDefault(d2, 0);
//获取当前距离平方在 cnt 中出现的次数。如果没有出现过,则默认为 0。
ans += c * 2;
cnt.put(d2, c + 1);
}
}
return ans;
}
}