447. 回旋镖的数量

给定平面上 n 对不同的点,“回旋镖” 是由点表示的元组 (i, j, k) ,其中 i 和 j 之间的距离和 i 和 k 之间的距离相等(需要考虑元组的顺序)。

找到所有回旋镖的数量。你可以假设 n 最大为 500,所有点的坐标在闭区间 [-10000, 10000] 中。

示例:

输入:

[[0,0],[1,0],[2,0]]

输出:

2

解释:

两个回旋镖为 [[1,0],[0,0],[2,0]] 和 [[1,0],[2,0],[0,0]]

PS:

这道题思路其实也比较简单,计算一点和其他点之间的距离,使用哈希表存储,若同一距离出现多次,则可以形成回旋镖。假设同一距离出现 n 次,由数字规律可推出回旋镖的数量 sum = n*(n-1) 。本人开始只能做到存储到哈希表,然后按该公式累加得到最后结果。参考了速度第一的答案,优化如下:假设当前同一距离的数量为 n, 回旋镖数量为 n*(n-1), 当再出现一个同一距离时,回旋镖的数量应为 (n+1)n,与之前相差 (n+1)n - n(n-1) = 2n, 所以只需要把最后答案加上 2*n, 最后 n+1 再存储到哈希表中。

class Solution {

     public int numberOfBoomerangs(int[][] points) {
int len = points.length;
int ans = 0;
HashMap<Double, Integer> map = new HashMap<Double, Integer>();
for(int i = 0; i < len; i++){
for(int j = 0; j < len; j++){
if(i != j){
double dis = Math.pow(points[i][0] - points[j][0], 2)
+ Math.pow(points[i][1] - points[j][1], 2);
if(!map.containsKey(dis)){
map.put(dis, 1);
}else{
int n = map.get(dis);
ans += 2 * n;
map.put(dis, 1+n);
}
}
}
map.clear();
}
return ans;
}
}

Java实现 LeetCode 447 回旋镖的数量的更多相关文章

  1. Leetcode 447.回旋镖的数量

    回旋镖的数量 给定平面上 n 对不同的点,"回旋镖" 是由点表示的元组 (i, j, k) ,其中 i 和 j 之间的距离和 i 和 k 之间的距离相等(需要考虑元组的顺序). 找 ...

  2. Java实现 LeetCode 726 原子的数量(递归+HashMap处理)

    726. 原子的数量 给定一个化学式formula(作为字符串),返回每种原子的数量. 原子总是以一个大写字母开始,接着跟随0个或任意个小写字母,表示原子的名字. 如果数量大于 1,原子后会跟着数字表 ...

  3. Java实现 LeetCode 452 用最少数量的箭引爆气球

    452. 用最少数量的箭引爆气球 在二维空间中有许多球形的气球.对于每个气球,提供的输入是水平方向上,气球直径的开始和结束坐标.由于它是水平的,所以y坐标并不重要,因此只要知道开始和结束的x坐标就足够 ...

  4. 447 Number of Boomerangs 回旋镖的数量

    给定平面上 n 对不同的点,“回旋镖” 是由点表示的元组 (i, j, k) ,其中 i 和 j 之间的距离和 i 和 k 之间的距离相等(需要考虑元组的顺序).找到所有回旋镖的数量.你可以假设 n ...

  5. 【leetcode 简单】 第一百零七题 回旋镖的数量

    给定平面上 n 对不同的点,“回旋镖” 是由点表示的元组 (i, j, k) ,其中 i 和 j 之间的距离和 i 和 k 之间的距离相等(需要考虑元组的顺序). 找到所有回旋镖的数量.你可以假设 n ...

  6. [Swift]LeetCode447. 回旋镖的数量 | Number of Boomerangs

    Given n points in the plane that are all pairwise distinct, a "boomerang" is a tuple of po ...

  7. Java for LeetCode 216 Combination Sum III

    Find all possible combinations of k numbers that add up to a number n, given that only numbers from ...

  8. Java for LeetCode 214 Shortest Palindrome

    Given a string S, you are allowed to convert it to a palindrome by adding characters in front of it. ...

  9. Java for LeetCode 212 Word Search II

    Given a 2D board and a list of words from the dictionary, find all words in the board. Each word mus ...

随机推荐

  1. xpath加PHP对网站相关数据的截取

    首先了解一串代码 <?php  $url = 'http://www.baidu.com';$ch = curl_init();curl_setopt($ch, CURLOPT_FILE, fo ...

  2. HMM-前向后向算法理解与实现(python)

    目录 基本要素 HMM三大问题 概率计算问题 前向算法 后向算法 前向-后向算法 基本要素 状态 \(N\)个 状态序列 \(S = s_1,s_2,...\) 观测序列 \(O=O_1,O_2,.. ...

  3. SDWebImage 原理及使用问题

    SDWebImage托管在github上.https://github.com/rs/SDWebImage 这个类库提供一个UIImageView类别以支持加载来自网络的远程图片.具有缓存管理.异步下 ...

  4. Vue中import用法

    1. 引入第三方插件 第三方常用插件参考https://blog.csdn.net/vbirdbest/article/details/86527886 2. 导入 css 文件 import 'iv ...

  5. Spring学习笔记(三):面向切面的Spring

    Spring之面向切面编程 一.理解何为面向切面编程 对于这个的理解,我觉得Spring实战中的例子讲得很明白: 假设我现在是一个小区用户,每个月小区都要收电费,这时候就会来人查看电表,算出来这个月电 ...

  6. MyBatis缓存机制(一级缓存,二级缓存)

    一,MyBatis一级缓存(本地缓存) My Batis 一级缓存存在于 SqlSession 的生命周期中,是SqlSession级别的缓存.在操作数据库时需要构造SqlSession对象,在对象中 ...

  7. Power安装linux-BIG ENDIAN mysql编译安装

    一.安装系统,不选择额外的软件 mkvdev -vadapter vhost0 -vdev hdisk2 -dev db_mysql01_sys mkvdev -vadapter vhost0 -vd ...

  8. iperf压测linux网卡带宽

    1.安装 yum install iperf --enablerepo=epel 2.启动服务端 iperf -s -i 1 3.启动客户端测试10分钟 iperf -c 172.16.3.153 - ...

  9. CF915D Almost Acyclic Graph

    题目链接:http://codeforces.com/contest/915/problem/D 题目大意: 给出一个\(n\)个结点\(m\)条边的有向图(无自环.无重边,2 ≤ n ≤ 500, ...

  10. 好用的python性能测试神器–Locust

    原文链接:https://mp.weixin.qq.com/s/9PxSPuHmucSLi_welq6uNQ 现在性能测试工具太多,根据业务不同使用,比如说我们熟悉的loadrunner.jmeter ...