Number of Boomerangs

weixin_34402408發表於2017-03-07

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

相關文章