Skip to content

Commit 6ec9939

Browse files
committed
Solved problem 973 : K Closest Point To Origin
1 parent 1513bc7 commit 6ec9939

File tree

2 files changed

+70
-3
lines changed

2 files changed

+70
-3
lines changed
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
/*
2+
* Problem: 973
3+
* Name: K Closest Point To Origin
4+
* Difficulty: Medium
5+
* Topic: Priority Queue
6+
* Link: https://leetcode.com/problems/
7+
*/
8+
9+
#include <bits/stdc++.h>
10+
#include <functional>
11+
#include <utility>
12+
#include <vector>
13+
using namespace std;
14+
15+
// Partial Sort Solution
16+
// Time Complexity: O(n log K)
17+
// Space Complexity: O(1)
18+
vector<vector<int>> kClosestPS(vector<vector<int>>& points, int K) {
19+
partial_sort(points.begin(), points.begin() + K, points.end(),
20+
[](vector<int>& p, vector<int>& q) { return p[0] * p[0] + p[1] * p[1] < q[0] * q[0] + q[1] * q[1];});
21+
return vector<vector<int>>(points.begin(), points.begin() + K);
22+
}
23+
24+
// Nth_Element Solution
25+
// Time Complexity: O(n log K)
26+
// Space Complexity: O(1)
27+
vector<vector<int>> kClosestNE(vector<vector<int>>& points, int K) {
28+
nth_element(points.begin(), points.begin() + K - 1, points.end(),
29+
[](vector<int>& p, vector<int>& q) {return p[0] * p[0] + p[1] * p[1] < q[0] * q[0] + q[1] * q[1];});
30+
return vector<vector<int>>(points.begin(), points.begin() + K);
31+
}
32+
33+
// Min Heap of Points
34+
// Time Complexity: O(n + k log n)
35+
// Space Complexity: O(n)
36+
struct MinDistanceComparator {
37+
bool operator()(vector<int>& p1, vector<int>& p2){
38+
return p1[0] * p1[0] + p1[1] * p1[1] > p2[0] * p2[0] + p2[1] * p2[1];
39+
}
40+
};
41+
42+
vector<vector<int>> kClosestPQP(vector<vector<int>>& points, int k) {
43+
priority_queue<vector<int>, vector<vector<int>>, MinDistanceComparator> ordered(points.begin(), points.end());
44+
vector<vector<int>> result;
45+
while (k--){
46+
result.push_back(ordered.top());
47+
ordered.pop();
48+
}
49+
return result;
50+
}
51+
52+
// Min Heap of Indexes
53+
// Time Complexity: O(n + k log n)
54+
// Space Complexity: O(n)
55+
vector<vector<int>> kClosestPQI(vector<vector<int>>& points, int k) {
56+
priority_queue<pair<double, int>, vector<pair<double,int>>, std::greater<pair<double, int>>> ordered;
57+
for (int idx = 0; idx < points.size(); idx++){
58+
ordered.push({points[idx][0] * points[idx][0] + points[idx][1] * points[idx][1], idx});
59+
}
60+
61+
vector<vector<int>> result;
62+
while (k--){
63+
result.push_back(points[ordered.top().second]);
64+
ordered.pop();
65+
}
66+
return result;
67+
}

README.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616

1717
### Problems Solved
1818

19-
| Total | 49 |
19+
| Total | 50 |
2020
|:---:|:---:|
2121

2222
#### Search By Topic
@@ -36,7 +36,7 @@
3636
| Intervals | 2 |
3737
| Linked Lists | 5 |
3838
| Math & Geometry | 4 |
39-
| Priority Queue | 2 |
39+
| Priority Queue | 3 |
4040
| Sliding Window | 1 |
4141
| Stack | 2 |
4242
| Tries | 0 |
@@ -47,7 +47,7 @@
4747
| Difficulty | Number |
4848
|:---|---:|
4949
| Easy | 45 |
50-
| Medium | 4 |
50+
| Medium | 5 |
5151
| Hard | 0 |
5252

5353
## Milestones

0 commit comments

Comments
 (0)