Problem: 1851. 包含每个查询的最小区间
深夜做这道题确实挺难的,也是用的优先队列,但是超时了,看了答案的,可以一次遍历就行,不需要重复遍历
Code
using pr = pair<int, int>; class Solution { public: vector<int> minInterval(vector<vector<int>>& intervals, vector<int>& queries) { int n = intervals.size(), s, e, i = 0, m = queries.size(), a; vector<int> qqqq = queries; sort(intervals.begin(), intervals.end()); vector<pair<int, int>> quer; for(int i = 0; i < m; i++) { quer.push_back({queries[i], i}); } sort(quer.begin(), quer.end()); priority_queue<pr, vector<pr>, decltype(greater<pr>())> pq; vector<int> ret(m, -1); for(auto& [q, ind] : quer) { while(i < n && intervals[i][0] <= q) { s = intervals[i][0]; e = intervals[i][1]; pq.push({e - s + 1, e}); i++; } while(!pq.empty() && pq.top().second < q) { pq.pop(); } if(!pq.empty()) ret[ind] = pq.top().first; } return ret; } };