447. 回旋镖的数量

给定平面上 n 对 互不相同 的点 points ,其中 points[i] = [xi, yi] 。回旋镖 是由点 (i, j, k) 表示的元组 ,其中 i 和 j 之间的距离和 i 和 k 之间的距离相等(需要考虑元组的顺序)。

返回平面上所有回旋镖的数量。

示例 1:输入:points = [[0,0],[1,0],[2,0]]
输出:2
解释:两个回旋镖为 [[1,0],[0,0],[2,0]] 和 [[1,0],[2,0],[0,0]]
示例 2:输入:points = [[1,1],[2,2],[3,3]]
输出:2
示例 3:输入:points = [[1,1]]
输出:0

解题思路

枚举+哈希表

对于每个点,我们计算出它与其他点的距离。对于到该点距离相同的点,我们加入到该距离对应的list中,该list中的任意两个点都可以与该点形成回旋镖,通过排列组合,我们可以计算出可以形成的回旋镖的个数

代码

class Solution {public int numberOfBoomerangs(int[][] points) {int n=points.length;Map<Integer,List<Integer>>[] map=new HashMap[n];for(int i=0;i<n;i++)map[i]=new HashMap<>();for(int i=0;i<n;i++)for(int j=i+1;j<n;j++){int x1=points[i][0],y1=points[i][1],x2=points[j][0],y2=points[j][1];int d=(x1-x2)*(x1-x2)+(y1-y2)*(y1-y2);if(!map[i].containsKey(d))map[i].put(d,new ArrayList<>());if(!map[j].containsKey(d))map[j].put(d,new ArrayList<>());map[i].get(d).add(j);map[j].get(d).add(i);}int res=0;for(int i=0;i<n;i++){for(List l:map[i].values()){if(l.size()>=2)res+=l.size()*(l.size()-1);}}return res;}
}

447. 回旋镖的数量相关推荐

  1. [LeetCode] 447.回旋镖的数量(Easy)C语言题解

    题目 给定平面上 n 对不同的点,"回旋镖" 是由点表示的元组 (i, j, k) ,其中 i 和 j 之间的距离和 i 和 k 之间的距离相等(需要考虑元组的顺序). 找到所有回 ...

  2. LeetCode 447. 回旋镖的数量(哈希map+组合数)

    1. 题目 给定平面上 n 对不同的点,"回旋镖" 是由点表示的元组 (i, j, k) ,其中 i 和 j 之间的距离和 i 和 k 之间的距离相等(需要考虑元组的顺序). 找到 ...

  3. 回旋数字c语言数组,LeetCode 447*. 回旋镖的数量(Python)

    给定平面上 n 对不同的点,"回旋镖" 是由点表示的元组 (i, j, k) ,其中 i 和 j 之间的距离和 i 和 k 之间的距离相等(需要考虑元组的顺序). 找到所有回旋镖的 ...

  4. 447 回旋镖的数量(暴力枚举)

    1. 问题描述: 给定平面上 n 对互不相同的点 points ,其中 points[i] = [xi, yi] .回旋镖是由点 (i, j, k) 表示的元组 ,其中 i 和 j 之间的距离和 i  ...

  5. 447 回旋镖的数量

    题目描述: 给定平面上 n 对不同的点,"回旋镖" 是由点表示的元组 (i, j, k) ,其中 i 和 j 之间的距离和 i 和 k 之间的距离相等(需要考虑元组的顺序). 找到 ...

  6. leetcode.447 回旋镖的数量

    这道题,有几点: 1.首先固定一个点,然后求其他点到这个点的距离集合, 2.在这个距离集合中,相等距离的有m个,则回旋镖数就有组合C(m, 2) * 2个, 3.回到步骤1 有个优化的方法,在存储距离 ...

  7. 「每日一题」回旋镖的数量

    这是 LeetCode 上 2021-9-13 的每日一题:「447. 回旋镖的数量」 1. 题目描述 给定平面上n对互不相同的点points,其中points[i] = [xi, yi].回旋镖是由 ...

  8. LeetCode(447)——回旋镖的数量(JavaScript)

    给定平面上 n 对不同的点,"回旋镖" 是由点表示的元组 (i, j, k) ,其中 i 和 j 之间的距离和 i 和 k 之间的距离相等(需要考虑元组的顺序). 找到所有回旋镖的 ...

  9. 每日一题_447.回旋镖的数量

    每日一题_447.回旋镖的数量 leetcode 447 题目: 题意分析: 今天的题目比较简单,没有复杂的算法,主要是用空间换时间.该题是给我们平面上一系列的点,这些点都在整数格点上,然后当其中一个 ...

最新文章

  1. Citrix Receiver For Linux 预览版
  2. 见到了“公司”定义一个Company类,那么见到了“字段”是不是也可定义一个Column类?...
  3. HTTP协议与TCP/IP协议的关系
  4. Silverlight中本地化的实现(语言切换)
  5. [mmu/cache]-cache的一些基本概念介绍
  6. 进入全真互联网——音视频通信的技术变革
  7. 抽象类(纯虚函数、虚函数)和虚基类(虚继承)
  8. 随机森林RF、XGBoost、GBDT和LightGBM的原理和区别
  9. flask 上传excel 前端_flask-restful编写上传图片api
  10. opencart卸载语言包要记得在后台进行设置否则会出错
  11. sh脚本和bash脚本_在脚本中使用Bash陷阱
  12. can connect mysql not server_MySQL -- 配置文件my.cnf 的详细说明
  13. 计算机视觉实战(十六)光流估计 (附完整代码)
  14. 从0开始学习 GitHub 系列之「Git 进阶」
  15. 华为OD机试 - 完美走位(Java JS Python)
  16. 17届技术报告 | 杭电四轮点此一队
  17. 字节、腾讯争先部署,ClickHouse+Doris 赶超 MySQL 810 倍
  18. 【matlab图像处理】matlab数据结构(1)
  19. 2021年全球强化采油表面活性剂收入大约202.3百万美元,预计2028年达到297.1百万美元
  20. 2019中信软开社招

热门文章

  1. C++开发者都应该使用的10个C++11特性
  2. 计算机网络(一)计算机网络体系
  3. 函数signal、sigaction
  4. 对于‘敲什么都队’自主开发的《校园服务》软件的使用体验
  5. C#中实现对象的深拷贝
  6. 大型运输行业实战_day12_1_权限管理实现
  7. 【C#-枚举】枚举的使用
  8. poj1681 Painter's Problem高斯消元
  9. 封装绑定以BaseDataList , ListControl 为基类的函数库
  10. 利用Caffe实现mnist的数据训练