题目链接
英文链接:https://leetcode.com/problems/number-of-boomerangs/
中文链接:https://leetcode-cn.com/problems/number-of-boomerangs/
题目详述
给定平面上 n 对不同的点,“回旋镖” 是由点表示的元组 (i, j, k)
,其中 i
和 j
之间的距离和 i
和 k
之间的距离相等(需要考虑元组的顺序)。
找到所有回旋镖的数量。你可以假设 n 最大为 500,所有点的坐标在闭区间 [-10000, 10000] 中。
示例:
1 | 输入: |
题目详解
(i, j, k)
中i
和j
之间的距离和i
和k
之间的距离相等,关键在于i
,可以固定i
。- 遍历
points
,对于每一个i
,遍历points
, 运用HashMap
统计i
和j
之间的距离相同的个数(因为距离为小数,可以改为存储距离的平方,且不会溢出)。 - 假设同一距离出现
n
次,易知此距离上的回旋镖数量为n * (n - 1)
。
1 | public class LeetCode_00447 { |
重复运用 HashMap
,每次用完进行 clear
可以提高效率。
1 | public class LeetCode_00447 { |
- 同一距离出现
n
次,易知此距离上的回旋镖数量为n * (n - 1)
;同一距离出现n + 1
次,易知此距离上的回旋镖数量为(n + 1) * n
。两者的差值为2 * n
,也就是说,相同距离加一,回旋镖的数量只需要在原来的基础上加上2 * n
。 - 在统计的过程中累计结果,避免最后遍历
HashMap
的过程,可以提高效率。
1 | public class LeetCode_00447 { |