回旋镖的数量
给定平面上 n 对 互不相同 的点 points ,其中 points[i] = [xi, yi] 。回旋镖 是由点 (i, j, k) 表示的元组 ,其中 i 和 j 之间的欧式距离和 i 和 k 之间的欧式距离相等(需要考虑元组的顺序)。
返回平面上所有回旋镖的数量。
输入:points = [[0,0],[1,0],[2,0]]
输出:2
解释:两个回旋镖为 [[1,0],[0,0],[2,0]] 和 [[1,0],[2,0],[0,0]]
输入:points = [[1,1],[2,2],[3,3]]
输出:2
输入:points = [[1,1]]
输出:0
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| var numberOfBoomerangs = function(points) { let count = 0; function calcDist(a, b) { return (a[0] - b[0]) ** 2 + (a[1] - b[1]) ** 2; } for (let i = 0; i < points.length; i++) { const map = {}; for (let j = 0; j < points.length; j++) { if (points[i] != points[j]) { let dist = calcDist(points[i], points[j]); map[dist] = (map[dist] || 0) + 1; } } for (let d in map) { let num = map[d]; if (num > 1) { count += num * (num - 1); } } } return count; };
|