LeetCode算法题-Number of Boomerangs(Java实现)
这是悦乐书的第231次更新,第244篇原创
01 看题和准备
今天介绍的是LeetCode算法题中Easy级别的第98题(顺位题号是447)。给定平面中的n个点都是成对不同的,“回旋镖”是点(i,j,k)的元组,使得i和j之间的距离等于i和k之间的距离(元组的顺序很重要))。找到回旋镖的数量。例如:
输入:[[0,0],[1,0],[2,0]
输出:2
说明:两个回旋镖是[[1,0],[0,0],[2,0]]和[[1,0],[2,0],[0,0]]
您可以假设n最多为500,点的坐标都在[-10000,10000](含)范围内。
本次解题使用的开发工具是eclipse,jdk使用的版本是1.8,环境是win7 64位系统,使用Java语言编写和测试。
02 解题
题目中回旋镖的意思是任意三点,只要满足两两距离相等就是一个回旋镖。比如a点,有两个点b和c到a的距离相等,那么就有两种组合,abc和acb都满足回旋镖。如果是三个点到a的距离都相等,就会有六种组合,就像排列组合一样。
我们只需要将距离相等的点记录下来,然后带入排列组合的公式n*(n-1)中,累加求和即可,最后的和就是全部可能的回旋镖。使用两层循环,让每一个点都做一次a点,去计算那些到a点距离相等的点。两点之间距离公式(x1-x2)2+(y1-y2)2,正常应该是需要开平方的,但是题目中有说范围,因此直接使用平方和,同时也不必担心溢出的风险。
public int numberOfBoomerangs(int[][] points) {
int result = 0;
Map<Integer, Integer> map = new HashMap<Integer, Integer>();
for (int i=0; i<points.length; i++) {
for (int j=0; j<points.length; j++) {
if (i == j) {
continue;
}
int a = points[i][0]-points[j][0];
int b = points[i][1]-points[j][1];
map.put(a*a+b*b, map.getOrDefault(a*a+b*b, 0)+1);
}
for (int val : map.values()) {
result += val*(val-1);
}
map.clear();
}
return result;
}
03 小结
算法专题目前已日更超过三个月,算法题文章98+篇,公众号对话框回复【数据结构与算法】、【算法】、【数据结构】中的任一关键词,获取系列文章合集。
以上就是全部内容,如果大家有什么好的解法思路、建议或者其他问题,可以下方留言交流,点赞、留言、转发就是对我最大的回报和支持!
LeetCode算法题-Number of Boomerangs(Java实现)的更多相关文章
- LeetCode算法题-Number Complement(Java实现-五种解法)
这是悦乐书的第240次更新,第253篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第107题(顺位题号是476).给定正整数,输出其补码数.补充策略是翻转其二进制表示的位 ...
- LeetCode算法题-Number of Lines To Write String(Java实现)
这是悦乐书的第319次更新,第340篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第188题(顺位题号是806).我们要将给定字符串S的字母从左到右写成行.每行最大宽度为 ...
- LeetCode算法题-Number of Segments in a String(Java实现)
这是悦乐书的第226次更新,第239篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第93题(顺位题号是434).计算字符串中的段数,其中段定义为非空格字符的连续序列.请注 ...
- LeetCode算法题-Number of 1 Bits(Java实现)
这是悦乐书的第186次更新,第188篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第45题(顺位题号是191).编写一个带无符号整数的函数,并返回它所具有的"1 ...
- LeetCode算法题-Rotate String(Java实现)
这是悦乐书的第317次更新,第338篇原创 在开始今天的算法题前,说几句,今天是世界读书日,推荐两本书给大家,<终身成长>和<禅与摩托车维修艺术>,值得好好阅读和反复阅读. 0 ...
- LeetCode算法题-Rotated Digits(Java实现)
这是悦乐书的第316次更新,第337篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第185题(顺位题号是788).如果一个数字经过180度旋转后,变成了一个与原数字不同的 ...
- LeetCode算法题-Toeplitz Matrix(Java实现)
这是悦乐书的第312次更新,第333篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第181题(顺位题号是766).如果从左上角到右下角的每个对角线具有相同的元素,则矩阵是 ...
- LeetCode算法题-Flood Fill(Java实现)
这是悦乐书的第306次更新,第325篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第173题(顺位题号是733).图像由二维整数数组表示,每个整数表示图像的像素值(从0到 ...
- LeetCode算法题-Image Smoother(Java实现)
这是悦乐书的第282次更新,第299篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第150题(顺位题号是661).给定表示图像灰度的2D整数矩阵M,您需要设计一个平滑器以 ...
随机推荐
- 【转】JSP中的JSTL与EL表达式用法及区别
对于JSTL和EL之间的关系,这个问题对于初学JSP的朋友来说,估计是个问题,下面来详细介绍一下JSTL和EL表达式他们之间的关系,以及JSTL和EL一些相关概念! EL相关概念JSTL一般要配合EL ...
- mysql Unknown error 1054
mysql查询错误 Unknown error 1054 错误原因:字段名字不对应 解决方案:一一比对字段名称,令实体字段名称与数据库字段对应或者与你的sql语句中的别名对应起来
- asp.net-基础-20180321
C#与.NET的关系 C#不是语言,.net是平台.
- 第四讲 smart qq 获取联系人信息 ,分组 好友 群聊
首先从post一下 http://s.web2.qq.com/api/get_user_friends2 这个链接获取分组categories ,好友信息 friends,info. string ...
- [nodejs] nodejs开发个人博客(二)入口文件
错误处理中间件 定义错误处理中间件必须使用4个参数,否则会被作为普通中间件 /*错误处理器*/ application.use(function(err,req,res,next){ console. ...
- ajax实现跨域访问
ajax跨域访问是一个老生畅谈的问题啦,网上解决方法很多,discuz用的p3p协议,有兴趣的朋友可以了解下,比较常用的是JSONP方法,貌似目前这种方法只支持GET方式,不如POST方式安全. 即使 ...
- Java中关于Map的使用(HashMap、ConcurrentHashMap)
在日常开发中Map可能是Java集合框架中最常用的一个类了,当我们常规使用HashMap时可能会经常看到以下这种代码: Map<Integer, String> hashMap = new ...
- 修改tomcat命令黑窗口的名字
一.为什么要修改tomcat黑窗口的名字 同时启动多个tomcat时,不好区分,而给tomcat的命令窗口取名区分是个不错的选择,例如下面这个效果. 二.修改的方法 1.找到tomcat的bin目录下 ...
- Java设计模式 - 单例模式详解(下)
单例模式引发相关整理 关联线程安全 在多线程下,懒汉式会有一定修改.当两个线程在if(null == instance)语句阻塞的时候,可能由两个线程进入创建实例,从而返回了两个对象.对此,我们可以加 ...
- Eureka开启登录认证
Eureka服务端配置 一.Eureka的pom.xml 引入spring-boot-starter-security坐标 <dependency> <groupId>org. ...