メインコンテンツへスキップ

NeetCode 150 [Heap / Priority Queue]medium:K Closest Points to Origin

· loading · loading ·
kiitosu
著者
kiitosu
画像処理やデバイスドライバ、データ基盤構築からWebバックエンドまで、多様な領域に携わってきました。地図解析や地図アプリケーションの仕組みにも経験があり、幅広い技術を活かした開発に取り組んでいます。休日は草野球とランニングを楽しんでいます。
目次

NeetCodeのSolutionを書いていく
#

Heap / Priority Queue
#

問題
#

2次元配列の points と整数 kが与えられます。 X-Y平面上の点を構成する座標を表します。 points[i] = [xi, yi] です。

[0, 0]に近いk個の点を返しましょう。 距離はユークリッド距離とします。 答えの順番は任意です。

#

Input: points = [[0,2],[2,2]], k = 1 Output: [[0,2]]

Input: points = [[0,2],[2,0],[2,2]], k = 2 Output: [[0,2],[2,0]]

制約
#

  • 1 <= k <= points.length <= 1000 -100 <= points[i][0], points[i][1] <= 100
  • 計算量:O(nlogk)
  • メモリ:O(k)

メモ
#

heaqpを使うのがポイント。

import heapq
from typing import List


class Solution:
    def kClosest(self, points: List[List[int]], k: int) -> List[List[int]]:
        minHeap = []

        # 計算量:O(n)
        for x, y in points:
            dist = (x**2) + (y**2)
            minHeap.append([dist, x, y])

        # 計算量:O(n)
        heapq.heapify(minHeap)
        res = []

        # 計算量O(k*logn)
        while k > 0:
            dist, x, y = heapq.heappop(minHeap)
            res.append([x, y])
            k -= 1

        return res
Reply by Email

関連記事

NeetCode 150 [Heap / Priority Queue]:easy 2/2
· loading · loading
NeetCode 150 [Trees]medium:preorder、inorderな配列から2分木を再構成する
· loading · loading
NeetCode 150 [Trees]medium:Kth Smallest Element In a Bst
· loading · loading