Advanced Two Pointer problem

Jimmy (xiaoke) Shen
2 min readMay 6, 2021

--

Leetcode 1847 Closest Room

This two pointer problem is the 4th problem of last week’s biweekly contest problem.

Explanation

Sort the query by minSize. Sort the room by size.

Then one pass to check the query from maximum minSize and add the satisified rooms whose size is larger than the required size into a set.

I remember there is a similar problem before, I forget that problem. I will add that paoblem in this article when I find it.

Complexity

Two Sorts: O(m log m), O(n log n)

After sorting, when find the results, we are searching from a balanced binary search tree (set in C++), the complexity is O(n log m).

Overrall complexity is O(K log K) where K is max(n, m).

1847. Closest Room

const int INF = 1e9;
struct Query{
int id, prefered, minSize;
bool operator< (const Query& b) {
return minSize < b.minSize;
}
};
class Solution {
public:
vector<int> closestRoom(vector<vector<int>>& rooms, vector<vector<int>>& queries) {
const int n = queries.size(), m = rooms.size();
vector<int> ret(n, -1);
vector<Query> q;
q.reserve(n);
for (int i = 0; i < n; ++i){
q.push_back({i, queries[i][0], queries[i][1]});
}
sort(q.begin(), q.end());
sort(rooms.begin(), rooms.end(), [](const vector<int> &a, const vector<int> &b) {
return a[1] < b[1];
});
set<int> S={-INF, INF};
int i = m;
for (int j = n -1; j >= 0; --j) {
auto minSize = q[j].minSize;
while (i - 1 >= 0 and rooms[i-1][1] >= minSize ) {
S.insert(rooms[i-1][0]);
--i;
}
auto prefered = q[j].prefered;
auto it = S.upper_bound(prefered);
auto thisRet = abs(*it - prefered) < abs(*prev(it) - prefered) ? *it : *(prev(it));
if (abs(thisRet) != INF) ret[q[j].id] = thisRet;
}
return ret;
}
};

Sign up to discover human stories that deepen your understanding of the world.

Free

Distraction-free reading. No ads.

Organize your knowledge with lists and highlights.

Tell your story. Find your audience.

Membership

Read member-only stories

Support writers you read most

Earn money for your writing

Listen to audio narrations

Read offline with the Medium app

--

--

No responses yet

Write a response