- Define the priority key and whether the smallest or largest item should lead.
- Push each candidate when it becomes eligible.
- Discard stale entries when necessary and process the best live candidate.
Code notes
- 44 lines of C++ from the credited upstream file 1801.cpp.
- The implementation visibly relies on sequence storage, work queue.
- 4 loop blocks detected.
Complexity
Count heap pushes and pops; each normally contributes a logarithmic factor in the heap size.
Check the problem constraints before deciding whether this complexity will pass.
Use this to learn the idea, then write your own version.
1class Solution {2 public:3 int getNumberOfBacklogOrders(vector<vector<int>>& orders) {4 constexpr int kMod = 1'000'000'007;5 int ans = 0;6 priority_queue<vector<int>> buysMaxHeap;7 priority_queue<vector<int>, vector<vector<int>>, greater<>> sellsMinHeap;8 9 for (const vector<int>& order : orders) {10 if (order[2] == 0)11 buysMaxHeap.push(order);12 else13 sellsMinHeap.push(order);14 while (!buysMaxHeap.empty() && !sellsMinHeap.empty() &&15 buysMaxHeap.top()[0] >= sellsMinHeap.top()[0]) {16 const int minAmount = min(buysMaxHeap.top()[1], sellsMinHeap.top()[1]);17 vector<int> buysMaxHeapTop = buysMaxHeap.top();18 buysMaxHeap.pop();19 buysMaxHeapTop[1] -= minAmount;20 if (buysMaxHeapTop[1] > 0)21 buysMaxHeap.push(buysMaxHeapTop);22 23 vector<int> sellsMinHeapTop = sellsMinHeap.top();24 sellsMinHeap.pop();25 sellsMinHeapTop[1] -= minAmount;26 if (sellsMinHeapTop[1] > 0)27 sellsMinHeap.push(sellsMinHeapTop);28 }29 }30 31 while (!buysMaxHeap.empty()) {32 ans += buysMaxHeap.top()[1], buysMaxHeap.pop();33 ans %= kMod;34 }35 36 while (!sellsMinHeap.empty()) {37 ans += sellsMinHeap.top()[1], sellsMinHeap.pop();38 ans %= kMod;39 }40 41 return ans;42 }43};44