leetcode-973-最接近原点的K个点
作者:互联网
题目描述:
可参考:题215
方法一:排序
class Solution: def kClosest(self, points: List[List[int]], K: int) -> List[List[int]]: points.sort(key = lambda P: P[0]**2 + P[1]**2) return points[:K]
快排+分治:
class Solution: def kClosest(self, points: List[List[int]], K: int) -> List[List[int]]: # 计算欧几里得距离 distance = lambda i: points[i][0] ** 2 + points[i][1] ** 2 def work(i, j, K): if i > j: return # 记录初始值 oi, oj = i, j # 取最左边为哨兵值 pivot = distance(oi) while i != j: while i < j and distance(j) >= pivot: j -= 1 while i < j and distance(i) <= pivot: i += 1 if i < j: # 交换值 points[i], points[j] = points[j], points[i] # 交换哨兵 points[i], points[oi] = points[oi], points[i] # 递归 if K <= i - oi + 1: # 左半边排序 work(oi, i - 1, K) else: # 右半边排序 work(i + 1, oj, K - (i - oi + 1)) work(0, len(points) - 1, K) return points[:K]
方法三:堆排序
from heapq import heappush, heappop class Solution: def kClosest(self, points: List[List[int]], K: int) -> List[List[int]]: queue = [] distance = lambda x: points[x][0]**2 + points[x][1]**2 length = len(points) for i in range(length): heappush(queue, (distance(i), points[i])) res = [] for i in range(K): res.append(heappop(queue)[1]) return res
标签:distance,973,个点,int,List,kClosest,points,leetcode,def 来源: https://www.cnblogs.com/oldby/p/11641068.html