-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathclosestRoom.cpp
More file actions
36 lines (33 loc) · 1.12 KB
/
closestRoom.cpp
File metadata and controls
36 lines (33 loc) · 1.12 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
// Source: https://leetcode.com/problems/closest-room/
// Author: Miao Zhang
// Date: 2021-06-11
class Solution {
public:
vector<int> closestRoom(vector<vector<int>>& rooms, vector<vector<int>>& queries) {
int n = rooms.size();
int m = queries.size();
for (int i = 0; i < m; i++) queries[i].push_back(i);
sort(begin(rooms), end(rooms), [] (const auto& r1, const auto& r2) {
return r1[1] > r2[1];
});
sort(begin(queries), end(queries), [] (const auto& q1, const auto& q2) {
return q1[1] > q2[1];
});
vector<int> res(m, -1);
int j = 0;
set<int> ids;
for (auto& q: queries) {
while (j < n && rooms[j][1] >= q[1]) {
ids.insert(rooms[j++][0]);
}
if (ids.empty()) continue;
int id = q[0];
auto it = ids.lower_bound(id);
int id1 = (it != end(ids)) ? *it : INT_MAX;
int id2 = id1;
if (it != begin(ids)) id2 = *prev(it);
res[q[2]] = abs(id1 - id) < abs(id2 - id) ? id1 : id2;
}
return res;
}
};