447. 回旋镖的数量 难度[中等]
给定平面上 n 对 互不相同 的点 points ,其中 points[i] = [xi, yi] 。回旋镖 是由点 (i, j, k) 表示的元组 ,其中 i 和 j 之间的距离和 i 和 k 之间的距离相等(需要考虑元组的顺序)。
返回平面上所有回旋镖的数量。
示例 1:
输入:points = [[0,0],[1,0],[2,0]]
输出:2
解释:两个回旋镖为 [[1,0],[0,0],[2,0]] 和 [[1,0],[2,0],[0,0]]
示例 2:
输入:points = [[1,1],[2,2],[3,3]]
输出:2
示例 3:
输入:points = [[1,1]]
输出:0
提示:
- n == points.length
- 1 <= n <= 500
- points[i].length == 2
- -10^4 <= xi, yi <= 10^4
- 所有点都 互不相同
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/number-of-boomerangs
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
这题主要 还是 看思路,遍历 p,再遍历q,用 map来存储p与q之间的距离,如果多个相等的距离则ans+= m*(m-1)
解法一:数据结构+遍历
class Solution {
public int numberOfBoomerangs(int[][] points) {
int ans = 0;
for(int[] p:points){
Map<Integer,Integer> map = new HashMap<>();
for(int[] q:points){
int len = (p[0]-q[0])*(p[0]-q[0]) + (p[1]-q[1])*(p[1]-q[1]);
map.put(len,map.getOrDefault(len,0)+1);
}
for(int key:map.keySet()){
int m = map.get(key);
ans+= m*(m-1);
}
}
return ans;
}
}
此文章创于本人学习时的记录,如有错误或更优解还请指出