您的位置:首页 > 编程语言 > Java开发

leetcode oj java Number of Boomerangs

2016-11-20 15:27 459 查看
一、问题描述:

 

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]]


二、解决思路:

    针对每个点遍历,找到与它距离相同的若干点的集合,针对集合的size做算术运算即可。 例如与点a距离相同的点有b c d e, 那么此时应该有4*3/2*2=12对boomerangs. 

三、代码:public class Solution {
public double comDis(int[] n1, int[] n2) {
return (n1[0] - n2[0]) * (n1[0] - n2[0]) + (n1[1] - n2[1]) * (n1[1] - n2[1]);
}
public int numberOfBoomerangs(int[][] points) {
int np = points.length;
if (np<3){
return 0;
}
double[] dis = new double[np];
int sum = 0;
int[] base = new int[2];
HashMap<Double, Integer> map = new HashMap<Double, Integer>();

for (int j = 0; j < np; j++) {
base = points[j];
map.clear();
for (int i = 0; i < np; i++) {
dis[i] = comDis(base, points[i]);
if (map.containsKey(dis[i])) {
map.put(dis[i], map.get(dis[i]) + 1);
} else {
map.put(dis[i], 1);
}
}
Iterator it = map.keySet().iterator();
while (it.hasNext()) {
double key = (double) it.next();
int num = map.get(key);
sum += (num) * (num - 1);
}
}

return sum;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: