Bueno yo me fui a la documentación porque no sabia mucho sobre el modulo heapq y en ella vi la solucion al problema pues los elementos del heap también pueden ser tuplas (prioridad, valor) en este caso mi prioridad es la distancia y mi valor es el punto, sabiendo que el método heappop() devuelve el elemento más pequeño, al usar tuplas se devuelve el par (distancia, punto) con la distancia más pequeña lo que es genial! para resolver el problema en unos pocos pasos 😁, aqui les dejo mi solución
import heapq
import math
from typing import List
def kClosest(puntos: List[List[int]], K: int) -> List[List[int]]:
heap = []
for punto in puntos:
distance = math.sqrt((punto[0]**2) + (punto[1]**2))
heapq.heappush(heap, (distance, punto))
#print(heapq.heappop(heap))
k_puntos = [heapq.heappop(heap)[1] for _ in range(K)]
return k_puntos
response = kClosest([[1,3], [3,4], [5,6]], 1)
print(response)
response = kClosest([[13,-8], [1,20], [-5,5]], 2)
print(response)
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?