Number of Boomerangs

2017-03-07  本文已影响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
上一篇下一篇

猜你喜欢

热点阅读