leetcode_447

Number of Boomerangs


Problem

给定一个点集。找出能组成的 boomerang 的个数。

boomerang 的定义是一个 (i, j, k) 元组:
满足 distance(i, j) = distance(j, k)

Solution

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
public class {
public int numberOfBoomerangs(int[][] points) {
Map<Integer, Integer> map = new HashMap<>();
int res = 0;
for(int i = 0; i < points.length; i++ ) {
for(int j = 0; j < points.length; j++ ) {
if(i == j) continue;
int d = getDistance(points[i], points[j]);
map.put( d, map.getOrDefault(map.get(d), 0) + 1 );
}
// 也就是说点 point[i] 为第一个点
// 从 map.get(point(i)) 中任意取两个点,放在第二个位置和第三个位置进行排列
for(int val : map.values()) {
res += val * (val - 1);
}
// 每跑完一轮就加一轮
// 加完以后,以这个点为第一个位置的计算就结束了
// 清空 map, 开始下一轮计算
map.clear();
}
return res;
}
private int getDistance(int[] a , int[] b) {
int x = a[0] - a[0];
int y = a[1] - b[1];
return x*x + y*y;
}
}