class Solution {
public:
void quick_sort(vector<vector<int>>& points, int left, int right)
{
if (left>right) return ;
vector<int> temp(2);
int base=points[left][0]*points[left][0]+points[left][1]*points[left][1];
int base_point[2]={points[left][0],points[left][1]};
int i=left, j=right;
while(i<j)
{
while (points[j][0]*points[j][0]+points[j][1]*points[j][1]>=base && i<j)
{
j--;
}
while(points[i][0]*points[i][0]+points[i][1]*points[i][1]<=base && i<j)
{
i++;
}
if (i<j)
{
temp=points[i];
points[i]=points[j];
points[j]=temp;
}
}
points[left]=points[i];
points[i][0]=base_point[0];
points[i][1]=base_point[1];
quick_sort(points, left, i-1);
quick_sort(points, i+1, right);
}
vector<vector<int>> kClosest(vector<vector<int>>& points, int K)
{
quick_sort(points, 0, points.size()-1);
int l=points.size()-K;
for(int i=1; i<=l; i++)
{
points.pop_back();
}
return points;
}
};
Leetcode973. 最接近原点的 K 个点--快速排序
最新推荐文章于 2021-10-25 12:58:58 发布