Skip to content

Commit 821b88d

Browse files
authored
Create Day30.cpp
1 parent 4efb751 commit 821b88d

File tree

1 file changed

+37
-0
lines changed

1 file changed

+37
-0
lines changed

Day30.cpp

+37
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
/*
2+
Author: Aryan Yadav
3+
K Closest Points to Origin
4+
Difficulty: Medium
5+
*/
6+
7+
class Solution {
8+
private:
9+
bool farther(vector<int>& p,vector<int>& q){
10+
return p[0]*p[0]+p[1]*p[1]>q[0]*q[0]+q[1]*q[1];
11+
}
12+
bool closer(vector<int>& p,vector<int>& q){
13+
return p[0]*p[0]+p[1]*p[1]<q[0]*q[0]+q[1]*q[1];
14+
}
15+
int partition(vector<vector<int>>& points,int left,int right){
16+
int pivot=left,l=left+1,r=right;
17+
while(l<=r){
18+
if(farther(points[l],points[pivot]) && closer(points[r],points[pivot]))
19+
swap(points[l++],points[r--]);
20+
if(!farther(points[l],points[pivot])) l++;
21+
if(!closer(points[r],points[pivot])) r--;
22+
}
23+
swap(points[pivot], points[r]);
24+
return r;
25+
}
26+
public:
27+
vector<vector<int>> kClosest(vector<vector<int>>& points, int k) {
28+
int l=0,r = points.size()-1;
29+
while(true){
30+
int p = partition(points,l,r);
31+
if(p == k-1) break;
32+
if(p<k-1) l = p+1;
33+
else r = p-1;
34+
}
35+
return vector<vector<int>>(points.begin(), points.begin()+k);
36+
}
37+
};

0 commit comments

Comments
 (0)