【Leetcode】447. Number of Boomerangs

本文探讨了一个特定的算法问题,即在给定的平面坐标点中寻找所谓的暴击三元组的数量。暴击三元组定义为任意三点i、j、k,使得点i到点j的距离等于点i到点k的距离,且i、j、k必须互不相同。文章提供了一种暴力解法的实现细节,包括如何避免自我距离计算、使用哈希映射来统计距离出现的次数以及如何根据这些统计数据计算出最终的暴击三元组数量。

题目:

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).

目前只有暴力解法。。。。。就是两个循环。。。。

注意:

  1. if(i==j) continue; 因为自己和自己是没有距离的,所以不能考虑这个情况。“continue”语句用来结束当前循环,并进入下一次循环,即仅仅这一次循环结束了,不是所有循环结束了,后边的循环依旧进行。

  2. 每次第二个循环完要清除一下map,用来计算和保存下一个点和各个点的距离。

  3. 然后计算有几种情况的时候用这个res += value * (value -1); 因为如果只有两个点到一个点的情况有两种,但是三个点就是六种。

4.算两点距离的时候用到了方法。

5.hashmap.put(distance, hashmap.getOrDefault(distance, 0) + 1);如果没有这个距离的话,就放入1,有的话就把之前的值加1。

Code:

public int numberOfBoomerangs(int[][] points) {
 int res = 0;  
 Map<Integer,Integer> d = new HashMap<Integer,Integer>();      
for(int i=0;i<points.length;i++){
    for(int j=0;j<points.length;j++){
        if(i==j) continue;
       int distance = getDistance(points[i], points[j]);
      d.put(distance, d.getOrDefault(distance, 0) + 1);           
    }        
for(int value : d.values()){
	res += value * (value -1);
   }
    d.clear();
}
    return res;
}
public int getDistance(int[] point1, int[] point2){
    int dx= point2[0] - point1[0];
    int dy=point2[1] - point1[1];
    return dx*dx + dy*dy;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值