在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)
    }
};
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容