64. K Closest Points to Origin
8203 ワード
道しるべ
平面上に点リストがある場合、原点(0,0)からKまでの点リストを順次出力します. 平面上の2点の距離はユークリッド距離である.
ユークリッド距離(Euclidean Distance)は、ユークリッド空間における2点間の距離を計算する最も一般的な方法の1つであり、式は以下の通りである.
例えば、原点(0,0)をx座標と呼ぶ場合、(1,3)中のy座標からのユークリッド距離は√(0−1)2+(0−3)2であり、この値は√10、約3.16である. この値は大きさ順に ユークリッド距離を計算し,この値を優先キューとして
Pythonの 最も遠い距離を出力する必要がある場合は、
結果を抽出する時間です. 結果リストでは、臀部から抽出した結果を
しかし、ここで距離を計算して、他の場所で使うのではなく、式を簡略化できるはずです.
どうせ順番が同じならいいから.
したがって、ここでは
これにより、不要な計算を低減し、実行速度を速めることができます.
平面上に点リストがある場合、原点(0,0)からKまでの点リストを順次出力します.
ユークリッド距離の優先キュー順序
class Solution:
def kClosest(self, points: List[List[int]], k: int) -> List[List[int]]:
heap = []
for (x, y) in points:
dist = x ** 2 + y ** 2
heapq.heappush(heap, (dist, x, y))
result = []
for _ in range(k):
(dist, x, y) = heapq.heappop(heap)
result.append((x, y))
return result
ユークリッド距離(Euclidean Distance)は、ユークリッド空間における2点間の距離を計算する最も一般的な方法の1つであり、式は以下の通りである.
例えば、原点(0,0)をx座標と呼ぶ場合、(1,3)中のy座標からのユークリッド距離は√(0−1)2+(0−3)2であり、この値は√10、約3.16である.
k
回抽出すればよいという難解な問題ではない.k
回の抽出語では,優先順位キューが直ちに思い出される.k
回出力すれば,容易に問題を解決できる.math
モジュールを用いて、上記のユークリッド距離式の計算を実現し、hipを挿入した.Pythonの
heapq
モジュールは最小hipであるため,出力距離が近い順序を必要とする問題解に適している.-dist
を挿入する形で負の数に変換して解くことができる.結果を抽出する時間です.
k
回挿入して返せばよい.
class Solution:
def kClosest(self, points: List[List[int]], k: int) -> List[List[int]]:
heap = []
for (x, y) in points:
dist = math.sqrt((0-x) ** 2 + (0-y) ** 2)
heapq.heappush(heap, (dist, x, y))
result = []
for _ in range(k):
(dist, x, y) = heapq.heappop(heap)
result.append((x, y))
return result
しかし、ここで距離を計算して、他の場所で使うのではなく、式を簡略化できるはずです.
どうせ順番が同じならいいから.
したがって、ここでは
math.sqrt()
を省略してもよい.これにより、不要な計算を低減し、実行速度を速めることができます.
Reference
この問題について(64. K Closest Points to Origin), 我々は、より多くの情報をここで見つけました https://velog.io/@corone_hi/64.-K-Closest-Points-to-Originテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol