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です。小さいほうの2つは、順に5の(-1, 2)と8の(2, -2)です。
challenge icon

発展問題

点は今では1つずつ届き、そのたびに、これまでの中で最も近い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]]