博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Number of Boomerangs
阅读量:5153 次
发布时间:2019-06-13

本文共 1206 字,大约阅读时间需要 4 分钟。

题目:

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:2Explanation:The two boomerangs are [[1,0],[0,0],[2,0]] and [[1,0],[2,0],[0,0]]

算法:

from collections import defaultdictclass 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求和即可。

转载于:https://www.cnblogs.com/Aurora-Twinkle/p/8709404.html

你可能感兴趣的文章
了解java虚拟机—非堆相关参数设置(4)
查看>>
mysql find_in_set
查看>>
数组的去重-----------------------来自大牛的讲解
查看>>
NSAttributedString
查看>>
Java复习之网络编程
查看>>
内存管理
查看>>
Python sys模块参考手册
查看>>
Storm的ack机制在项目应用中的坑
查看>>
C#与vb6 com组件的互相调用方法
查看>>
对象-关系映射ORM(Object Relational Mapping)(转)
查看>>
Python入门系列——第14篇
查看>>
ReflectedSchemas应该定期清理否则会占用大量C盘空间
查看>>
Django中的cookie与session
查看>>
JavaScript快速入门(三)——JavaScript语句
查看>>
数据结构与算法历程
查看>>
POJ 1797 Heavy Transportation
查看>>
汇编语言---内存变量的地址
查看>>
ISP DSP的不同
查看>>
深入Linux grep指令的详解(实用型)
查看>>
嵌入式根文件系统的移植和制作详解
查看>>