zoukankan      html  css  js  c++  java
  • LeetCode

    链接

    447. Number of Boomerangs

    题意

    回旋镖之数。给定n个点(x和y坐标),找出这样的所有三点组合(i,j,k):i到j的距离等于i到k的距离。n至多等于500。

    思路

    遍历所有的点,因为点的顺序也有关系,所以j仍要从0开始。获得i和j的距离后存入map中,若当前距离已有value,则value++,否则value为0。全部遍历完成后,相当于有了一个所有可能的距离的点的集合。

    代码

    public class Solution {
        public int numberOfBoomerangs(int[][] points){
        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++){
                if(i == j) continue;
                int distance = getDistance(points[i],points[j]);
                map.put(distance, map.getOrDefault(distance,0)+1);
            }
            for(int val : map.values()){
                result += val*(val-1); // 满足条件的点的排列结果数(val取2)
            }
            map.clear(); // 这步很关键,因为如果不清空map,则会存在AB点距离等于CD点距离的情况,四个点不符合题意
        }
    
        return result;
    }
    
        public int getDistance(int[] point1, int[] point2){
            int x = point1[0] - point2[0];
            int y = point1[1] - point2[1];
            return x*x + y*y;
        }
    }
    
  • 相关阅读:
    (总结)Nginx配置文件nginx.conf中文详解(转自:http://www.ha97.com/5194.html)
    位图数据压缩算法
    sqlalchemy 使用
    Linux c 使用数学函数库出现问题.
    小笔记
    hibernate框架的学习(一)
    foreach
    发现的问题
    第一天练习
    进制转换
  • 原文地址:https://www.cnblogs.com/zyoung/p/6892159.html
Copyright © 2011-2022 走看看