LintCode 1237.回旋镖的数量

描述:

在平面中给定 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(排列组合方式),继续去循环下一个点。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值