美文网首页
Number of Boomerangs

Number of Boomerangs

作者: 穿越那片海 | 来源:发表于2017-03-07 22:24 被阅读0次

    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
    

    相关文章

      网友评论

          本文标题:Number of Boomerangs

          本文链接:https://www.haomeiwen.com/subject/iwsvgttx.html