【leetcode】-距离原点最近的前 k 对坐标

192 阅读1分钟

题目

(考试的时候忘了记题目,大概编一哈!)

给定坐标数组 arr = [[1,2],[-2,-2]] 和正整数 k =1 ,求坐标距离原点的 k 个最近距离的坐标集合,参考勾股定理 a^2 + b^2 = c^2 ,这个距离就是 c。

示例

示例1:
输入:arr1 = [[1, 2], [-2, -2]], k1 = 1
输出:[ [ 1, 2 ] ]
解释:[1, 2] 和 [-2, -2] 距离原点的距离的平方分别是 58 
示例2:
输入:arr2 = [[-1, 9], [-2, -2],[8,-5]], k2 = 2
输出:[ [ -2, -2 ], [ -1, 9 ] ]
解释:[-1, 9] 和 [-2, -2] 和 [8,-5] 距离原点的距离的平方分别是 82889
示例3:
输入:arr3 = [[3, 4], [2, -7],[0,2],[6,-2]], k3 = 3
输出:[ [ 0, 2 ], [ 3, 4 ], [ 6, -2 ] ]
解释:[3, 4] 和 [2, -7] 和 [0,2] 和 [6,-2] 距离原点的距离的平方分别是 2553440

题解

// ◆封装获取距离原点最近的前 k 对坐标的函数
function getshortDis(arr, k) {
    let disArr = []
    let resArr = []
    arr.forEach(item => {
        // let disValue = Math.abs(item[0]) * Math.abs(item[0]) + Math.abs(item[1]) * Math.abs(item[1])
        let disValue = Math.pow(Math.abs(item[0]),2) + Math.pow(Math.abs(item[1]),2)
        disArr.push({ key: item, value: disValue })
    })
    disArr.sort((a, b) => {
        return a.value - b.value
    })
    for (let i = 0; i < k; i++) {
        resArr.push(disArr[i].key)
    }
    return resArr
}
// ◆测试用例
let arr1 = [[1, 2], [-2, -2]], k1 = 1
console.log(getshortDis(arr1, k1))
// [ [ 1, 2 ] ]
let arr2 = [[-1, 9], [-2, -2],[8,-5]], k2 = 2
console.log(getshortDis(arr2, k2));
// [ [ -2, -2 ], [ -1, 9 ] ]
let arr3 = [[3, 4], [2, -7],[0,2],[6,-2]], k3 = 3
console.log(getshortDis(arr3, k3));
// [ [ 0, 2 ], [ 3, 4 ], [ 6, -2 ] ]