2024.1.8力扣每日一题——回旋镖的数量

题目来源

力扣每日一题;题序:447

我的题解

方法一 双层哈希表

构造如下的哈希表:{节点i:{距离1:数量,…距离n:数量}}
相当于求每个节点与其他 节点的欧式距离,并统计相同距离的数量,最后计算回旋镖的数量只需要看相同欧氏距离的数量超过1个的,由于可以换顺序,因此相当于在k个满足的节点之间选两个,并且有两种顺序,所以每一组的贡献为: k ( k − 1 ) 2 × 2 \frac{k(k-1)}{2}×2 2k(k1)×2

时间复杂度:O( n 2 n^2 n2)。n是节点的数量。
空间复杂度:O( n 2 n^2 n2)。

public int numberOfBoomerangs(int[][] points) {
   
    int n=points.length;
    Map<Integer,Map<Double,Integer>> count=new HashMap<>();
    for(int i=0;i<n;i++){
   
        Map<Double,Integer> t=new HashMap<>();
        for(int j=0;j<n;j++){
   
            if(i==j)
                continue;
            double dis=distance(points[i][0],points[i][1],points[j][0],points[j][1]);
            t.put(dis,t.getOrDefault(dis,0)+1);
        }
        count.put(i,t);
    }
    // System.out.println(count);
    int res=0;
    for(int key:count.keySet()){
   
        Map<Double,Integer> t=count.get(key);
        for(Double dis:t.keySet()){
   
            int m=t.get(dis);
            if(m>=2){
   
                res+=m*(m-1);
            }
        }
    }
    return res;
}   
public double distance(int x1,int y1,int x2,int y2){
   
    return Math.sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
}
方法二 哈希表优化版

首先外围的哈希表实际并没有什么用,我们可以在每次构建完成哈希表之后就计算以当前节点尾回旋镖中间节点的的回旋镖数量,并不需要使用两层哈希表保留结果,然后最后再同一计算。

时间复杂度:O( n 2 n^2 n2)
空间复杂度:O(n)

public int numberOfBoomerangs(int[][] points) {
   
   int n=points.length;
    int res=0;
    for(int i=0;i<n;i++){
   
        Map<Integer,Integer> t=new HashMap<>();
        for(int j=0;j<n;j++){
   
            if(i==j)
                continue;
            int dis=distance(points[i][0],points[i][1],points[j][0],points[j][1]);
            t.put(dis,t.getOrDefault(dis,0)+1);
        }
        for(Integer dis:t.keySet()){
   
            int m=t.get(dis);
            res+=m*(m-1);
        }
    }
    return res;
}   
public int distance(int x1,int y1,int x2,int y2){
   
    return (x1-x2)*(x1-x2)+(y1-y2)*(y1-y2);
}

有任何问题,欢迎评论区交流,欢迎评论区提供其它解题思路(代码),也可以点个赞支持一下作者哈😄~

相关推荐

  1. 每日447回旋数量

    2024-01-11 01:38:01       37 阅读
  2. 2024.1.8每日——回旋数量

    2024-01-11 01:38:01       40 阅读
  3. 算法每日回旋数量 | 坐标距离 | 哈希

    2024-01-11 01:38:01       36 阅读
  4. LeetCode——447. 回旋数量

    2024-01-11 01:38:01       36 阅读
  5. 2024.2.1每日——数字游戏

    2024-01-11 01:38:01       16 阅读
  6. 2024.4.26每日——快照数组

    2024-01-11 01:38:01       92 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-11 01:38:01       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-11 01:38:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-11 01:38:01       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-11 01:38:01       20 阅读

热门阅读

  1. HDMI2.1 Redriver 信号增强 支持8K60

    2024-01-11 01:38:01       43 阅读
  2. [Microsoft Edge] 如何彻底卸载 Edge

    2024-01-11 01:38:01       34 阅读
  3. 小程序开发之uniapp项目框架搭建

    2024-01-11 01:38:01       43 阅读
  4. VUE +element ui 表格实现数据轮播滚动效果

    2024-01-11 01:38:01       33 阅读
  5. SQL Server 加密 view文本

    2024-01-11 01:38:01       38 阅读
  6. BloomFilter和BitMap的介绍与使用

    2024-01-11 01:38:01       33 阅读
  7. C++系列十六:类与对象

    2024-01-11 01:38:01       38 阅读
  8. python装饰器嵌套基础

    2024-01-11 01:38:01       36 阅读
  9. Linux防火墙相关命令

    2024-01-11 01:38:01       37 阅读
  10. Kubernetes 调度器及其优化

    2024-01-11 01:38:01       28 阅读
  11. 3个Linux文件权限命令

    2024-01-11 01:38:01       37 阅读