这是悦乐书的第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实现)的更多相关文章

  1. LeetCode算法题-Number Complement(Java实现-五种解法)

    这是悦乐书的第240次更新,第253篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第107题(顺位题号是476).给定正整数,输出其补码数.补充策略是翻转其二进制表示的位 ...

  2. LeetCode算法题-Number of Lines To Write String(Java实现)

    这是悦乐书的第319次更新,第340篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第188题(顺位题号是806).我们要将给定字符串S的字母从左到右写成行.每行最大宽度为 ...

  3. LeetCode算法题-Number of Segments in a String(Java实现)

    这是悦乐书的第226次更新,第239篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第93题(顺位题号是434).计算字符串中的段数,其中段定义为非空格字符的连续序列.请注 ...

  4. LeetCode算法题-Number of 1 Bits(Java实现)

    这是悦乐书的第186次更新,第188篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第45题(顺位题号是191).编写一个带无符号整数的函数,并返回它所具有的"1 ...

  5. LeetCode算法题-Rotate String(Java实现)

    这是悦乐书的第317次更新,第338篇原创 在开始今天的算法题前,说几句,今天是世界读书日,推荐两本书给大家,<终身成长>和<禅与摩托车维修艺术>,值得好好阅读和反复阅读. 0 ...

  6. LeetCode算法题-Rotated Digits(Java实现)

    这是悦乐书的第316次更新,第337篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第185题(顺位题号是788).如果一个数字经过180度旋转后,变成了一个与原数字不同的 ...

  7. LeetCode算法题-Toeplitz Matrix(Java实现)

    这是悦乐书的第312次更新,第333篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第181题(顺位题号是766).如果从左上角到右下角的每个对角线具有相同的元素,则矩阵是 ...

  8. LeetCode算法题-Flood Fill(Java实现)

    这是悦乐书的第306次更新,第325篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第173题(顺位题号是733).图像由二维整数数组表示,每个整数表示图像的像素值(从0到 ...

  9. LeetCode算法题-Image Smoother(Java实现)

    这是悦乐书的第282次更新,第299篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第150题(顺位题号是661).给定表示图像灰度的2D整数矩阵M,您需要设计一个平滑器以 ...

随机推荐

  1. Zepto整体概况

    var Zepto = (function(){ var zepto = {},$; zepto.Z = function(dom, selector) { return new Z(dom,sele ...

  2. CSS一些样式以及注意

    [在这里归纳一些有用,但是不常用而不容易记住的一些CSS属性-(日后慢慢补充)] border-radius:100px; --圆角[比如按钮使用之后由长方形变成类似椭圆] placeholder=& ...

  3. 第一册:lesson seventy nine.

    原文: Carol's shopping list. What are you doing Carol? I'm making a shopping list Tom. What do we need ...

  4. 【转载】Windows服务器修改远程桌面默认端口

    因为 windows服务器远程桌面端口默认是 3389端口,使用系统默认端口的风险很大,很容易被攻击软件扫描以及攻击,同时频繁的扫描和攻击会导致服务器的 CPU 及带宽资源耗尽,因此为了保证服务器的安 ...

  5. C# winform自动更新 (附 demo下载)

    随着需求的变化,如果Server每次更新出新的内容,Client都要重新安装的话. 太过于复杂化.  所以自动更新是很有必要的. 一..NET自带的更新方式    以服务器端为主  (自动更新,微软爸 ...

  6. 从零开始学安全(二十六)●利用Nmap目标的本版进行探测

    通过对对方电脑的服务探测 对本版较低的服务 或者无补丁的服务 可以直入侵 版本探测 version  后边就是版本

  7. Android Studio 新建项目结构分析

    这是我刚刚新建的项目  默认都是Android模式的项目结构,但这并不是真实的目录结构 把他换成Project模式 项目的真实目录结构 1app 项目的代码,资源 2 gradle  wrappere ...

  8. struts2_HelloWorld

    第一个Struts2程序-Hello 1.创建web工程struts2-01-Hello 2.导入jar包到bin目录,jar地址: https://files.cnblogs.com/files/a ...

  9. mysql5.7 datetime 默认值为‘0000-00-00 00:00:00'值无法创建问题解决

    mysql5.7 datetime 默认值为‘0000-00-00 00:00:00'值无法创建问题解决

  10. QueryRunner使用之可变条件的处理

    在三层架构的Dao层中,需要通过不确定的条件,从数据库查询结果. 可以利用List集合作为容器将条件存储起来. 实际开发中的代码: public List<Hotel> searchByF ...