-
题目链接 https://leetcode-cn.com/problems/k-closest-points-to-origin/
-
题目描述
-
我们有一个由平面上的点组成的列表
points
。需要从中找出K
个距离原点(0, 0)
最近的点。(这里,平面上两点之间的距离是欧几里德距离。)
你可以按任何顺序返回答案。除了点坐标的顺序之外,答案确保是唯一的。
-
输入:points = [[1,3],[-2,2]], K = 1 输出:[[-2,2]] 解释: (1, 3) 和原点之间的距离为 sqrt(10), (-2, 2) 和原点之间的距离为 sqrt(8), 由于 sqrt(8) < sqrt(10),(-2, 2) 离原点更近。 我们只需要距离原点最近的 K = 1 个点,所以答案就是 [[-2,2]]。
示例 2:
输入:points = [[3,3],[5,-1],[-2,4]], K = 2 输出:[[3,3],[-2,4]] (答案 [[-2,4],[3,3]] 也会被接受。)
-
-
解题思路
- 最大堆:维护一个最大堆,遍历points,当堆的size小于K时,在末尾处追加point,或者当point的距离小于堆顶时,替换掉堆顶,并维护堆。
- sorted:简单粗暴,升序排序后取前k个数
-
代码
- python
class Solution: def kClosest(self, points, K): #return sorted(points, key=lambda a: a[0] ** 2 + a[1] ** 2)[:K] import heapq res = [] for point in points: dis = point[0] ** 2 + point[1] ** 2 if len(res) < K: res.append([dis] + point) heapq._siftdown_max(res, 0, len(res) - 1) elif res[0][0] > dis: res[0] = [dis] + point heapq._siftup_max(res, 0) return [it[1:] for it in res]
- python
leetcode 973. 最接近原点的 K 个点
最新推荐文章于 2020-11-09 08:12:12 发布