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

本文共 1304 字,大约阅读时间需要 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).

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

解法:

这道题主要条件是计算三点中第一个点到第二个点的距离和第一个点到第三个点的距离是否相等,因为顺序有关,所以要返回到底有多少排列满足这个条件。所以给定一个点的数组,

要依次选择每个点当做第一个点, 依次求出它跟其他点的距离,如果相等则给结果加一,最后返回总数。

数据结构:

HashMap去存储距离和这个距离出现的次数。

代码:

public int numberOfBoomerangs(int[][] points){    int result = 0;    HashMap
() map= new HashMap<>(); for(int i = 0; i < points.length; i++){ for(int j = 0; j < points.length; j++){ if(i == j) continue; int distance = getDistance(points[i],points[j]); map.put(distance, map.getOrDefault(distance,0)+1); } for(int val : map.values()){ result += val*(val-1); //满足条件的点的排列组合结果数 } map.clear(); } return result;}public int getDistance(int[] point1, int[] point2){ int x = point1[0] - point2[0]; int y = point1[1] - point2[1]; return x*x + y*y;}

转载地址:http://hvpmx.baihongyu.com/

你可能感兴趣的文章
oracle recyclebin与flashback drop
查看>>
我的友情链接
查看>>
svmlight使用说明
查看>>
LVM
查看>>
学习之shell脚本
查看>>
Andorid Launcher程序代码分析
查看>>
Swing 和AWT之间的关系
查看>>
Mysql设置自增长主键的初始值
查看>>
Android计时器正确应用方式解析
查看>>
性能及监控
查看>>
linux系统CPU、内存、硬盘、网络、lnmp服务整体监控邮件报警
查看>>
我的友情链接
查看>>
个人总结问卷调查,头脑风暴,焦点小组的区别
查看>>
【转】不懂得使用工具的测试不是好测试
查看>>
JMeter基础之-使用技巧
查看>>
获取post传输参数
查看>>
ASP生成静态页面的方法
查看>>
使用递归从数据库读取数据来动态建立菜单
查看>>
mysql 权限
查看>>
HDU 1325 Is It A Tree? 判断是否为一棵树
查看>>