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