1. 问题描述:

给定平面上 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
提示:
n == points.length
1 <= n <= 500
points[i].length == 2
-10 ^ 4 <= xi, yi <= 10 ^ 4
所有点都互不相同
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/number-of-boomerangs

2. 思路分析:

分析题目可以知道最简单的做法是使用三层循环暴力枚举,但是有可能会超时,我们还可以对其优化一下,我们其实可以使用枚举每一类点,使用哈希表将距离相等的点存储在一起,也即对距离相等的点进行计数,为了避免开根号导致的精度问题我们可以在哈希表中存储距离的平方,这样我们可以使用两层循环解决,第一层循环用来枚举三元组中的第一个点,第二层循环用来枚举其余的两个点,然后枚举字典计算以当前的第i个点为第一个点到达j, k两个点距离相等的组合数目。

3. 代码如下:

from typing import List
import collectionsclass Solution:def numberOfBoomerangs(self, p: List[List[int]]) -> int:res = 0for i in range(len(p)):dic = collections.defaultdict(int)for j in range(len(p)):if i != j:dx = p[i][0] - p[j][0]dy = p[i][1] - p[j][1]# 为了避免精度的问题所以存储距离的平方dic[dx ** 2 + dy ** 2] += 1# 枚举答案的数目for k, v in dic.items():# 需要考虑其余两个点的顺序所以不用除以2res += v * (v - 1)return res

447 回旋镖的数量(暴力枚举)相关推荐

  1. 447. 回旋镖的数量

    447. 回旋镖的数量 给定平面上 n 对 互不相同 的点 points ,其中 points[i] = [xi, yi] .回旋镖 是由点 (i, j, k) 表示的元组 ,其中 i 和 j 之间的 ...

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

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

  3. 447 回旋镖的数量

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

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

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

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

    给定平面上 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. LINUX 查找tomcat日志关键词
  2. PTA数据结构与算法题目集(中文)7-29
  3. Python 设计模式: 单例模式(singleton pattern)
  4. 【机器学习基础】前置知识(五):30分钟掌握常用Matplotlib用法
  5. 使用wireshark+ssh+tcpdump远程抓包
  6. React开发(284):注意点击事件大小写
  7. 李国杰院士:国内开源社区的崛起需要一个过程
  8. 人工智能的炒作_为什么人工智能被过度炒作?
  9. 后视摄像头_鸡肋还是“真香”?流媒体后视镜到底值不值冲?
  10. Oracle GoldenGate Director安装和配置(无图)
  11. php url 合法字符串_PHP函数补完:http_build_query()构造URL字符串
  12. Netty4.0学习笔记系列之六:多种通讯协议支持
  13. 【备忘】大数据爬虫项目超清视频+源码
  14. Reviewboard使用介绍
  15. RPLIDAR十分钟极速入门教程
  16. 制作CAB包以及文件签名
  17. 使用cntv(原cctvbox-中国网络电视台)下载视频
  18. 黄瓜客户端java_建造者模式
  19. 方波与sinc函数之间的最全傅里叶变换关系_助记_有图有推导
  20. Oracle OCP学习——Catalog的配置与使用

热门文章

  1. [译] Elixir、Phoenix、Absinthe、GraphQL、React 和 Apollo:一次近乎疯狂的深度实践 —— 第二部分(测试相关部分)...
  2. GPL/wide-dhcpv6/dhcp6c源代码分析
  3. android 字体设置方正,Android设置TextView的字体
  4. ZZULIOJ1018
  5. day03 OpenAL 编译及案例(windows)
  6. 【Java刷题笔记】牛客网Java入门 1~4
  7. 三国志战略版S2开荒攻略
  8. STM32F407核心板定时器功能引脚分配
  9. 网站服务器宕机,B站服务器宕机惊动上海消防,官微致歉
  10. 华硕笔记本(UEFI)支持U盘启动