-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path:w
50 lines (45 loc) · 1.32 KB
/
:w
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#include <iostream>
#include <queue>
#include <vector>
#include <cmath>
using namespace std;
class comp {
public:
bool operator() (pair<int, float> a, pair<int, float> b) {
return a.second < b.second;
}
};
float length(int a, int b) {
return (sqrt((a*a) + (b * b)));
}
pair<int, int> kthClosest(vector<vector<int>>& points, int k) {
vector <vector< int> > ans;
//max heap
priority_queue <pair<int, float>, vector <pair<int, float> >, comp > pq1;
for (int i = 0; i < k; i++) {
pair<int, float> p1 = make_pair(i, length(points[i][0], points[i][1]));
pq1.push(p1);
}
for (int i = k; i < points.size(); i++ ) {
float lengthTemp = length(points[i][0], points[i][1]);
if (lengthTemp < pq1.top().second) {
pq1.pop();
pq1.push(make_pair(i, lengthTemp));
}
}
return make_pair (points[pq1.top().first], points[pq1.top().first][1]);
}
vector <vector< int> > kClosest (vector <vector <int > > &points, int k) {
vector <vector <int > > ans;
for (int i = 1; i <= k; i++ ) {
pair<int, int> temp = kthClosest (points, i);
vector <int> tempVec;
tempVec.push_back(temp.first);
tempVec.push_back(temp.second);
ans.push_back(tempVec);
}
return ans;
}
int main() {
return 0;
}