题目
(考试的时候忘了记题目,大概编一哈!)
给定坐标数组 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] 距离原点的距离的平方分别是 5 和 8
示例2:
输入:arr2 = [[-1, 9], [-2, -2],[8,-5]], k2 = 2
输出:[ [ -2, -2 ], [ -1, 9 ] ]
解释:[-1, 9] 和 [-2, -2] 和 [8,-5] 距离原点的距离的平方分别是 82 和 8 和 89
示例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] 距离原点的距离的平方分别是 25 和 53 和 4 和 40
题解
// ◆封装获取距离原点最近的前 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 ] ]