虽然是一道easy的题,不过还是很开心
主要是利用了Map这种数据结构和forEach这个迭代函数才加快了速度
题目意思是给一个由平面点组成的数组,然后找出这些点之中以一个点为起点,计算这个点和其他点的距离,找出距离一样的最多数
如果暴力遍历的话复杂度是O(n^3),肯定要优化的
但如果以i这个枢纽遍历,就只需要O(n^2),并且期间使用哈希表存储距离和这个距离的数量,就更加快了
当然也可有可能是这个题提交的js代码比较少所以我才捡了个便宜
var numberOfBoomerangs = function (points) {
let rst = 0
points.forEach((e, index) => {
let record = new Map()
for (let i = 0; i < points.length; i++) {
if (index !== i) {
let distance = dis(points[index], points[i])
let value = record.get(distance)
record.set(distance, value + 1 || 1)
}
}
record.forEach((n) => {
rst += n * (n - 1)
});
})
return rst
function dis(a, b) {
return Math.pow(a[0] - b[0], 2) + Math.pow(a[1] - b[1], 2)
}
};