描述:
在平面中给定 n 个点,每一对点都是不同的,“回旋镖”是一个点的的元素 (i,j,k) ,其中 i 和 j 之间的距离与 i 和 k 之间的距离相同(元素的顺序是重要的)。
找到回旋镖的数量。您可以假设 n 最多为500并且点的坐标都在 [-10000,10000](包括)范围内。
样例:
输入:
[[0,0],[1,0],[2,0]]
输出:
2
说明:
两个回旋镖是[[1,0],[0,0],[2,0]]和[[1,0],[2,0],[0,0]]
代码:
public int numberOfBoomerangs(int[][] points) {
// Write your code here
int len=points.length;
int count=0;
int tempRes=0;
int result=0;
HashMap<Integer,Integer> hasDis=new HashMap<Integer,Integer>();
for(int i=0;i<len;i++){
for(int j=0;j<len;j++){
int distance=(points[j][1]-points[i][1])*(points[j][1]-points[i][1])+(points[j][0]-points[i][0])*(points[j][0]-points[i][0]);
if(distance!=0){
if(hasDis.containsKey(distance)){
count=hasDis.get(distance);
hasDis.put(distance,count+1);
tempRes=tempRes+count;
}else{
hasDis.put(distance,1);
}
}
}
result+=tempRes*2;
tempRes=0;
hasDis.clear();
}
return result;
}
补充说明 :
定义一个HashMap hasDis用来存放points之间的距离和这个距离存在的个数。
循环遍历所有点之间的距离,若距离不为0,则查看hasDis是否存在这个distance,把这个distance键值对应的count加一,加上当前的计数。最后再把这个temp*2(排列组合方式),继续去循环下一个点。