File tree 1 file changed +37
-0
lines changed
1 file changed +37
-0
lines changed Original file line number Diff line number Diff line change
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
+ };
You can’t perform that action at this time.
0 commit comments