forked from USPCodeLabSanca/dev.hire-2021
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path973.cpp
More file actions
95 lines (74 loc) · 2.4 KB
/
Copy path973.cpp
File metadata and controls
95 lines (74 loc) · 2.4 KB
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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
//#define DEBUG
class Solution {
public:
vector<vector<int>> kClosest(vector<vector<int>>& points, int k) {
this->mergeSort(points, 0, points.size() - 1);
vector<vector<int>> kPoints(points.begin(), points.begin() + k);
return kPoints;
}
void mergeSort(vector<vector<int>>& points, int l, int r) {
if (l < r) {
#ifdef DEBUG
cout << "mergeSort:" << l << ", " << r << endl;
#endif
float mid = l + (r - l) / 2;
this->mergeSort(points, l, mid);
this->mergeSort(points, mid + 1, r);
this->merge(points, l, mid, r);
}
}
double calculateDistance(vector<int> point) {
double x = pow(point[0], 2);
double y = pow(point[1], 2);
return sqrt(x + y);
}
void merge(vector<vector<int>>& points, int l, int m, int r) {
vector<vector<int>> A;
vector<vector<int>> B;
for (int i = 0; i < ((m - l) + 1); i++) {
A.push_back(points[l + i]);
}
for (int i = 0; i < (r - m); i++) {
B.push_back(points[m + 1 + i]);
}
#ifdef DEBUG
cout << "A" << endl;
for (int i = 0; i < A.size(); i++) {
cout << A[i][0] << "," << A[i][1] << endl;
}
cout << "B" << endl;
for (int i = 0; i < B.size(); i++) {
cout << B[i][0] << "," << B[i][1] << endl;
}
cout << "i" << "\t\t" << "j" << "\t\t" << "vA?vB" << endl;
#endif
int i = 0;
int j = 0;
int k = l;
while (i < A.size() && j < B.size()) {
double valA = this->calculateDistance(A[i]);
double valB = this->calculateDistance(B[j]);
#ifdef DEBUG
cout << i << "\t\t" << j << "\t\t" << valA << "?" << valB << endl;
#endif
if (valA <= valB) {
points[k] = A[i];
i++;
} else {
points[k] = B[j];
j++;
}
k++;
}
while (i < A.size()) {
points[k] = A[i];
k++;
i++;
}
while (j < B.size()) {
points[k] = B[j];
k++;
j++;
}
}
};