leetcode 973最接近原点的K个点(优先队列)

    科技2022-07-13  126

    题目描述: 我们有一个由平面上的点组成的列表 points。需要从中找出 K 个距离原点 (0, 0) 最近的点。

    (这里,平面上两点之间的距离是欧几里德距离。)

    你可以按任何顺序返回答案。除了点坐标的顺序之外,答案确保是唯一的。

    示例 1:

    输入: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]]。

    思路: 使用优先队列

    代码如下:

    class Solution { public: struct cmp{ bool operator()(pair<int,int>&a,pair<int,int>&b){ return a.first*a.first+a.second*a.second<b.first*b.first+b.second*b.second; } }; vector<vector<int>> kClosest(vector<vector<int>>& points, int K) { vector<vector<int>>res; priority_queue<pair<int,int>,vector<pair<int,int>>,cmp>q; for(int i=0;i<points.size();i++){ pair<int,int>x; x.first=points[i][0]; x.second=points[i][1]; q.push(x); if(q.size()>K) q.pop(); } while(!q.empty()){ res.push_back({q.top().first,q.top().second}); q.pop(); } return res; } };
    Processed: 0.009, SQL: 8