Menu
CoddyTech

K Closest Points to Origin

中等堆排序python iconjava iconcpp iconc iconjs icon+10

给定平面上的 n 个点:点 i 是 (xs[i], ys[i])。返回距离原点 (0, 0) 最近的 k 个点,每个点表示为一对 [x, y]。

按点到原点的距离从近到远排列答案。距离相同的点先按 x 从小到大排列,再按 y 从小到大排列。重复列出的点按每个副本分别计数。

函数

kClosest(xs: integer-array, ys: integer-array, k: integer) → integer-2d-array
xsinteger-array
每个点的 x 坐标
ysinteger-array
每个点的 y 坐标
kinteger
返回多少个点
返回值integer-2d-array
按距离从近到远排列的 k 个最近点,以 [x, y] 对的形式表示;距离相同时,按 x 再按 y 排序

约束条件

  • n == xs.length == ys.length
  • 1 ≤ k ≤ n ≤ 5000
  • -104 ≤ xs[i], ys[i] ≤ 104
  • 积分可能会重复,每个副本都是一个单独的积分。

示例

输入
xs = [3, -1, 2, 0]ys = [1, 2, -2, 5]k = 2
输出
[[-1, 2], [2, -2]]
解释
平方距离分别是 10、5、8 和 25。两个最小值依次对应 (-1, 2)(5)和 (2, -2)(8)。
challenge icon

进阶

现在这些点会逐个到达,每到达一个点,你都必须报告目前为止最近的 k 个点。你需要多少内存?

重置代码
def kClosest(xs, ys, k):
    # 在这里编写代码

测试 #1

测试 #2

测试 #3

参数

xs = [3, -1, 2, 0]
ys = [1, 2, -2, 5]
k = 2

预期输出

[[-1, 2], [2, -2]]