在leetcode上第一个击败100%的AC:447 Number of Boomeranges

虽然是一道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)
    }
};

你可能感兴趣的:(在leetcode上第一个击败100%的AC:447 Number of Boomeranges)