64. K Closest Points to Origin
🎯 leetcode - 973. K Closest Points to Origin
🤔 私の答え
📌 質問する
📌 一つ.K回抽出🤔? →優先順位スタート!
🤔 私の答え
📌 質問する
- 파이썬 알고리즘 인터뷰 64번 문제
📌 名前の日付2020.02.28
📌 試行回数2 try
💡 Codeclass Solution:
def kClosest(self, points: List[List[int]], K: int) -> List[List[int]]:
plist = []
for x, y in points:
plist.append([x, y, (x * x + y * y)])
plist = sorted(plist, key=lambda x: x[2], reverse = True)
result = []
for _ in range(K):
result.append(plist.pop()[:-1])
return result
💡 トラブルシューティング方法- plist에 [x좌표, y좌표, 거리^2]를 저장했다.
- plist를 거리값을 기준으로 '내림차순'으로 정렬했다. (큰 값이 앞으로 오게)
- 그리고 K개 만큼 plist.pop[:-1] 한 것을 result 리스트에 담았다.
(거리는 sorted의 key값으로 사용하기 위해 넣은 것이다. 결과를 출력할 때는 필요가 없다.)
- 최종적으로 result 리턴한다.
💡 新知-
答えを間違える理由-
😉 別の解釈📌 一つ.K回抽出🤔? →優先順位スタート!
import heapq
class Solution:
def kClosest(self, points: List[List[int]], K: int) -> List[List[int]]:
heap = []
for x, y in points:
heapq.heappush(heap, (x * x + y * y, x, y))
result = []
for _ in range(K):
result.append(heapq.heappop(heap)[1:])
return result
💡 トラブルシューティング方法- K번 추출이라는 단어에서 '우선 순위 큐'를 자연스럽게 떠올릴 수 있다.
- 값을 기준으로 최소힙을 만드는 heapq를 생성한다.
- heapq.headppop을 통해 K개 만큼 값을 뽑아 result 리스트에 넣는다.
- 단, heap의 첫번째 요소(거리값)는 필요 없으므로 heapq.heappop(heap)[1:] 슬라이싱한다.
- 최종적으로 result를 리턴한다.
💡 新知-
Reference
この問題について(64. K Closest Points to Origin), 我々は、より多くの情報をここで見つけました https://velog.io/@eunseokim/64.-K-Closest-Points-to-Originテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol