• 447. Number of Boomerangs


    Given n points in the plane that are all pairwise distinct, a "boomerang" is a tuple of points (i, j, k) such that the distance between i and j equals the distance between i and k (the order of the tuple matters).

    Find the number of boomerangs. You may assume that n will be at most 500 and coordinates of points are all in the range [-10000, 10000] (inclusive).

    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]]
    

    Solution1:(TLE)

    class Solution:
        def numberOfBoomerangs(self, points):
            """
            :type points: List[List[int]]
            :rtype: int
            """
            res = 0
            def compute(x,y):
                return (x[0]-y[0])**2 + (x[1]-y[1])**2
            for i in range(len(points)-2):
                for j in range(i+1,len(points)-1):
                    for k in range(j+1,len(points)):
                        if compute(points[i],points[j]) == compute(points[i],points[k]):
                            res += 2
                        if compute(points[i],points[j]) == compute(points[j],points[k]):
                            res += 2
                        if compute(points[k],points[j]) == compute(points[i],points[k]):
                            res += 2
            return res
    

    Brute force.
    24 / 31 test cases passed.

    Solution2:

    class Solution:
        def numberOfBoomerangs(self, points):
            """
            :type points: List[List[int]]
            :rtype: int
            """
            res = 0
            def compute(x,y):
                return (x[0]-y[0])**2 + (x[1]-y[1])**2
            for i in range(len(points)):
                dic = {}
                for j in range(len(points)):
                    if i==j:
                        continue
                    temp = compute(points[i],points[j])
                    if temp not in dic:
                        dic[temp] = 1
                    else:
                        dic[temp] += 1
                for key,value in dic.items():
                    res += value*(value-1)
            return res
    

    典型的以空间换时间的策略,用一个字典保存每个点到该点的距离,从而将时间复杂度从O(n3)降到了O(n2)。

  • 相关阅读:
    HTML DOM Document 对象
    浏览器对象模型 BOM
    JavaScript数组和字符串基础
    JavaScript基础一
    css属性hack
    浏览器兼容性问题
    css常见居中方法
    初析BFC
    学习Css的初级篇
    THML基础学习
  • 原文地址:https://www.cnblogs.com/bernieloveslife/p/10235257.html
Copyright © 2020-2023  润新知