• 447. Number of Boomerangs


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

    在一个数组中找到满足以下条件的三元组(i,j,k)的个数

    • 1.要求(i,j)的欧氏距离等于(i,k)

    • 2.(i,k,j)(j,k,i)为不同

    
    public int distance(int a[],int b[])
        {
            int x = a[0] - b[0];
            int y = a[1] - b[1];
            return x*x + y*y;
        }
        public int numberOfBoomerangs(int[][] points) {//[a,b,c,d]
            int result = 0;
            HashMap<Integer,Integer> map = new HashMap<>();
            for(int i  = 0; i < points.length; i++)
            {
                for(int j = 0; j < points.length ; j++) //内层循环,计算ab,ac,ad距离
                {
                    if(i != j)
                    {
                        int dis = distance(points[i], points[j]);
                        map.put(dis, map.getOrDefault(dis, 0) + 1); //类似python a.get(key,default)
                    }
                }
                for(int val:map.values()) 
                    result += val * (val-1); //全排列 A(n,2)
                map.clear(); //清空map
            }
            
            return result;
        }
    

    在一次循环中,遍历所有的点,找出任意两个点的距离,例如(ab,ac,ad),并保存距离为d个组合个数n。由于条件2,相当于全排列A(n,2)

    知识点:

    • 1.map获取值的方式map.getOrDefault(Object key, Integer defaultValue)类似与python的dict的get

    • 2.map.values的用法,类似的有map.keySet()

  • 相关阅读:
    编译原理第一次作业
    【码制】关于原码,反码,补码的一些笔记和理解
    输出1到50以内的所有素数【C】
    方法和数组
    if条件判断和switch,for do while
    变量
    全选,删除,添加
    java基础
    二级联
    轮播图
  • 原文地址:https://www.cnblogs.com/wxshi/p/7764951.html
Copyright © 2020-2023  润新知