雖然是一道easy的題惨险,不過還是很開心
主要是利用了Map這種數(shù)據(jù)結構和forEach這個迭代函數(shù)才加快了速度
題目意思是給一個由平面點組成的數(shù)組,然后找出這些點之中以一個點為起點你稚,計算這個點和其他點的距離,找出距離一樣的最多數(shù)
如果暴力遍歷的話復雜度是O(n^3),肯定要優(yōu)化的
但如果以i這個樞紐遍歷糕簿,就只需要O(n^2),并且期間使用哈希表存儲距離和這個距離的數(shù)量怀挠,就更加快了
當然也可有可能是這個題提交的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)
}
};