Easy
给定平面内n个点,"boomerang"是一个数组(i, j, k)
满足i
到j
的距离和i
到k
的距离相同(顺序需考虑)
找到"boomerang"的个数。假设n<=500, 坐标点范围[-10000, 10000]
Example
Input:
[[0,0],[1,0],[2,0]]
Output:
2
Explanation:
The two boomerangs are [[1,0],[0,0],[2,0]] and [[1,0],[2,0],[0,0]]
首先建立计算点到点距离,存储在矩阵中。距离矩阵每一行有相同数字,则说明对应点距离相同,可以构建"boomerang",如果相同数字有k个,则有k(k-1)中"boomerang"。每一行可能有多个相同数字。因为顺序影响结果,所以每行的总"boomerang"数目加起来就是总的"boomerang"数目。我的方法不是很efficient。刚开始使用numpy arrary来存储dist_matrix出现了超时,改成list后勉强能过,应该可以在计算距离上提高效率(现在重复计算了)
from collections import Counter
class Solution(object):
def numberOfBoomerangs(self, points):
"""
:type points: List[List[int]]
:rtype: int
"""
if len(points) < 3:
return 0
else:
total = 0
dist_matrix = [[(i[0]-j[0])**2 + (i[1]-j[1])**2 for j in points] for i in points]
for i in range(len(points)):
for count in Counter(dist_matrix[i]).values():
total += count*(count-1)
return total