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]]
这是一个寻找等腰三角形的过程= =由于这还是一个排列问题 所以相同距离下排列的个数是n(n-1)
public class Solution { public int numberOfBoomerangs(int[][] points) { int result = 0; for(int i =0;i<points.length;i++){//使用两重循环首先遍历每一个点作为端点的情况 HashMap<Integer,Integer>map = new HashMap<Integer,Integer>(); for(int j = 1; j<points.length;j++)//然后测量当前端点到其余点的距离 这里使用了map来计数 { if(i==j){ continue; } else{ int dist = getDistance(points[i],points[j]); if(map.containsKey(dist)==false){ map.put(dist,1); } else{ map.put(dist,1+map.get(dist)); } } } for(Integer val : map.values()){ result += val * (val - 1); } } return result; } int getDistance(int[] p1, int[] p2){ int x = p1[0] - p2[1]; int y = p1[1] - p2[0]; return x*x + y*y; } }