【力扣刷题】447. 回旋镖的数量

Problem: 447. 回旋镖的数量

解题方法

要查找(i,j)和(i,k)的欧式距离相同的点
两层循环,第一层循环固定i点,第二层循环枚举所有点j,计算i,j之间的欧氏距离,并将相同欧氏距离的点加入到同一个集合中。
在同一个集合中,新加入的点所能带来的所有回旋镖的数量为:之前加入该集合的所有点的个数*2(*2表示j和k有顺序要求)

欧式距离:

欧式距离也称欧几里得距离,是最常见的距离度量,衡量的是多维空间中两个点之间的绝对距离。
原文
[算法实现]

def getDist(p1, p2):
    return math.sqrt(sum([(a - b)**2 for (a,b) in zip(p1, p2)]))

复杂度

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

Code

class Solution:
    def numberOfBoomerangs(self, points: List[List[int]]) -> int:
        ans = 0
        for x1, y1 in points:
            cnt = Counter()
            for x2, y2 in points:
                t = (x1 - x2) ** 2 + (y1 - y2) ** 2
                ans += cnt[t] * 2
                cnt[t] += 1
        return ans

思路借鉴自

https://leetcode.cn/problems/number-of-boomerangs/solutions/2595488/jian-ji-xie-fa-fu-xiang-si-ti-mu-pythonj-39p8/?envType=daily-question&envId=2024-01-08

  • 17
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值