leetcodeSolution to some Leetcode problems written in C++ |
git clone git://git.dimitrijedobrota.com/leetcode.git |
Log | Files | Refs | README | LICENSE |
1834.cpp (1077B)
0 class Solution {
1 struct item {
2 int index, et, pt;
3 item(int i, int e, int p) : index(i), et(e), pt(p) {}
4 friend bool operator<(const item &i1, const item &i2) {
5 return (i1.pt > i2.pt) || (i1.pt == i2.pt && i1.index > i2.index);
6 }
7 };
9 public:
10 vector<int> getOrder(vector<vector<int>> &tasks) {
11 vector<item> ss;
12 for (int i = 0; i < tasks.size(); i++)
13 ss.push_back({i, tasks[i][0], tasks[i][1]});
14 sort(ss.begin(), ss.end(), [](const item &i1, const item &i2) { return (i1.et < i2.et); });
16 vector<int> res;
17 priority_queue<item> pq;
18 int t = 0;
19 for (int i = 0; i < ss.size();) {
20 if (pq.empty() && t < ss[i].et) t = ss[i].et;
21 while (i < ss.size() && ss[i].et <= t)
22 pq.push(ss[i++]);
23 item it = pq.top();
24 pq.pop();
25 res.push_back(it.index);
26 t += it.pt;
27 }
28 while (!pq.empty())
29 res.push_back(pq.top().index), pq.pop();
30 return res;
31 }
32 };