447. 回旋镖的数量

集合

import java.util.HashMap;

class Solution {
    public int numberOfBoomerangs(int[][] points) {

        int count = 0;

        for (int i = 0; i < points.length; i++) {

            HashMap<Integer, Integer> map = new HashMap<>();

            /**
             * 遍历每个点,分别将其作为i
             * 然后在剩下的点中寻找距离相等的点,如果个数大于等于2,说明符合情况
             * 顺序不同的元组也要考虑,因此j也要从0开始,且不能和i相等
             */
            for (int j = 0; j < points.length; j++) {

                if (j != i) {

                    /**
                     * 用map记录下所有可能的距离和次数,即距离相等的点的个数
                     */
                    int dis = distance(points[i], points[j]);
                    map.put(dis, map.getOrDefault(dis, 0) + 1);
                }
            }

            /**
             * 对于有n个距离相等的点,总的排列可能是n * (n - 1)
             * 如果只有1个点,那么结果是0
             */
            for (Integer num : map.values()){
                count += num * (num - 1);
            }
        }

        return count;
    }

    /**
     * 两点距离平方求和
     */
    public int distance(int[] a, int[] b){

        return (a[0] - b[0]) * (a[0] - b[0]) + (a[1] - b[1]) * (a[1] - b[1]);
    }
}

/**
 * 时间复杂度 O(n^2)
 * 空间复杂度 O(n)
 */

https://leetcode-cn.com/problems/number-of-boomerangs/

posted @ 2021-12-08 14:13  振袖秋枫问红叶  阅读(38)  评论(0)    收藏  举报