有一个由平面上的点组成的列表points,需要从中找出K个距离原点(0,0)最近的点。
(平面上两点之间最近的距离是欧几里得距离)。
class Solution
{
public:
struct cmp
{
bool operator()(pair<int,int>& a,pair<int,int>& b)
{
return a.first*a.first+a.second*second<b.first*b.first+b.second*b.second;
}
}
vector<vector<int>> KClosest(vector<vector<int>>& points, int K)
{
vector<vector<int>> ans;
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())
{
ans.push_back({q.top().first,q.top().second});
q.pop();
}
return ans;
}
};