集合
import java.util.HashMap;
class Solution {
public int numberOfBoomerangs(int[][] points) {
int count = 0;
for (int i = 0; i < points.length; i++) {
HashMap<Integer, Integer> map = new HashMap<>();
/**
* 遍历每个点,分别将其作为i
* 然后在剩下的点中寻找距离相等的点,如果个数大于等于2,说明符合情况
* 顺序不同的元组也要考虑,因此j也要从0开始,且不能和i相等
*/
for (int j = 0; j < points.length; j++) {
if (j != i) {
/**
* 用map记录下所有可能的距离和次数,即距离相等的点的个数
*/
int dis = distance(points[i], points[j]);
map.put(dis, map.getOrDefault(dis, 0) + 1);
}
}
/**
* 对于有n个距离相等的点,总的排列可能是n * (n - 1)
* 如果只有1个点,那么结果是0
*/
for (Integer num : map.values()){
count += num * (num - 1);
}
}
return count;
}
/**
* 两点距离平方求和
*/
public int distance(int[] a, int[] b){
return (a[0] - b[0]) * (a[0] - b[0]) + (a[1] - b[1]) * (a[1] - b[1]);
}
}
/**
* 时间复杂度 O(n^2)
* 空间复杂度 O(n)
*/
https://leetcode-cn.com/problems/number-of-boomerangs/