Number of Boomerangs

Easy

给定平面内n个点,"boomerang"是一个数组(i, j, k)满足ij的距离和ik的距离相同(顺序需考虑)

找到"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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容