标签:pre 完整 return size cpp 没有 最小 class int
有n个任务,且tasks[i] = [enqueueTimei, processingTimei] 意味着第 i?????????? 项任务将会于 enqueueTimei 时进入任务队列,需要 processingTimei 的时长完成执行。现有一个单线程 CPU ,同一时间只能执行 最多一项 任务,该 CPU 将会按照下述方式运行:
返回 CPU 处理任务的顺序。
const int N=1e5+5;
struct node{
int id, inqTime, time;
}A[N];
struct cmp{
bool operator()(node& a, node& b){
if (a.time != b.time)
return a.time > b.time;
return a.id > b.id;
}
};
bool cmp1(const node &a, const node &b){
return a.inqTime < b.inqTime;
}
class Solution {
public:
vector<int> getOrder(vector<vector<int>>& ts) {
int n = ts.size();
vector<int> ans(n);
for (int i=0; i<n; i++) A[i] = {i, ts[i][0], ts[i][1]};
sort(A, A+n, cmp1);
priority_queue<node, vector<node>, cmp> q;
long long j = 0, cur = 0;
for (int i = 0; i < n || !q.empty(); ) {
if (q.empty()) {
cur = max(cur, (long long) A[i].inqTime);
}
while (i < n && A[i].inqTime <= cur) q.push(A[i++]); //只要当期任务的入队时机在我的执行时间cur前面,就需要入队等待
ans[j++] = q.top().id; //所有任务都入队完毕,选一个执行时间最少的执行
cur += q.top().time;
q.pop();
}
return ans;
}
};
标签:pre 完整 return size cpp 没有 最小 class int
原文地址:https://www.cnblogs.com/wdt1/p/14673181.html