Description: 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]]
解题思路:
内外两层循环遍历,计算出外循环点到内循环各点的距离,并存入Map中。遍历结束后计算个数。
Java-Solution
class Solution {
public int numberOfBoomerangs(int[][] points) {
int result = 0;
for (int i = 0; i < points.length; i++) {
Map<Long, Integer> dMap = new HashMap<>();
long distance;
int count;
for (int j = 0; j < points.length; j++) {
if (i == j) {
continue;
}
distance = (points[i][0] - points[j][0]) * (points[i][0] - points[j][0]) +
(points[i][1] - points[j][1]) * (points[i][1] - points[j][1]);
count = 0;
if (dMap.containsKey(distance)) {
count = dMap.get(distance);
}
count++;
dMap.put(distance, count);
}
Iterator<Map.Entry<Long, Integer>> iter = dMap.entrySet().iterator();
while (iter.hasNext()) {
int val = iter.next().getValue();
result += val * (val-1);
}
}
return result;
}
}