• 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).

    题意为假定平面上n个点两两都不同,boomerang解释为具有这样性质的由点组成的元组(i,j,k):i到j的距离等于i到k的距离,顺序不同元组就不同。请找出n个点中所有的boomerang,返回总数,n最多为500,且坐标范围在[-10000,10000]之间。点击这里看原题

    例如:

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

    算法:

    from collections import defaultdict
    class Solution:
        def numberOfBoomerangs(self, points):
            num=0
            for x1,y1 in points:
                distance=defaultdict(int)
                for x2,y2 in points:
                    dx=x1-x2
                    dy=y1-y2
                    d=dx**2+dy**2
                    distance[d]+=1
                num+=sum(n*(n-1) for n in distance.values())
            return num
    

    算法思路是这样的,每次取一个点,算出这个点与剩下的所有点距离,并用一个哈希表存起来,例如,若有三个点到这个点的距离相同,则此距离的键值为3,根据排列组合的知识,这三个点可与取的点组成3*2个boomerang,以此类推,直到将points遍历完,对所有的boomerang求和即可。

    初心易得,始终难守。
  • 相关阅读:
    简单介绍数据流动的控制
    数据再寄存器中的暂时保存
    八位三态数据通路控制器的逻辑电路设计讲解
    什么是同步有限状态机???
    verilog逻辑复制
    流水线经典讲解!!!!!
    流水线(pipe-line)简介
    总线(BUS)和总线操作
    多路选择器(multiplexer)简介
    使用telnet发送HTTP请求
  • 原文地址:https://www.cnblogs.com/Aurora-Twinkle/p/8709404.html
Copyright © 2020-2023  润新知