leetcode 5736 周赛 单线程cpu 优先队列和排序
2021/4/18 18:57:19
本文主要是介绍leetcode 5736 周赛 单线程cpu 优先队列和排序,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
通过这个题熟悉了下iota的用法,vector自定义排序(根据另一个数组来排当前的数组) 优先队列对pair数据的处理方式,很好的一道题
1 class Solution { 2 public: 3 using PII = pair<int,int>;//type def 4 5 vector<int> getOrder(vector<vector<int>>& tasks) { 6 int size = tasks.size(),time = 0,pos = 0;//pos 对tasks按照开始执行时间排序,保存其index,pos对index数组遍历,然后从tasks中依次取出元素 7 vector<int> ret;//存储结果的vector 8 vector<int> v(size,0);//存储index的 9 iota(v.begin(),v.end(),0);//1,2,3,4...size 10 sort(v.begin(),v.end(),[&](int a,int b){return tasks[a][0] < tasks[b][0];});//按开始执行时间排序index 11 priority_queue<PII,vector<PII>,greater<PII>> q;//最小堆 12 13 while(pos<size) 14 { 15 if(q.empty())//队列为空 在当前时间点内无任务到达 就直接去跳到下一个任务 16 time = max(tasks[v[pos]][0],time); 17 while(pos<=size-1 && time >= tasks[v[pos]][0]) 18 q.emplace(tasks[v[pos]][1],v[pos++]);//入堆 19 //对于pair,堆会先比较第一个元素,再比较第二个元素,既满足了执行时间短的先执行也满足了时间相等时下标小的先执行 20 time += q.top().first; 21 ret.emplace_back(q.top().second);//存结果 22 q.pop(); 23 //if(ret.size() == size) break;//也可以等到全入堆后就break,然后依次pop 24 } 25 while(!q.empty()) 26 { 27 ret.emplace_back(q.top().second); 28 q.pop(); 29 } 30 return ret; 31 } 32 };
iota的用法
这篇关于leetcode 5736 周赛 单线程cpu 优先队列和排序的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-27Nacos多环境配置学习入门
- 2024-12-27Nacos快速入门学习入门
- 2024-12-27Nacos快速入门学习入门
- 2024-12-27Nacos配置中心学习入门指南
- 2024-12-27Nacos配置中心学习入门
- 2024-12-27Nacos做项目隔离学习入门
- 2024-12-27Nacos做项目隔离学习入门
- 2024-12-27Nacos初识学习入门:轻松掌握服务发现与配置管理
- 2024-12-27Nacos初识学习入门:轻松掌握Nacos基础操作
- 2024-12-27Nacos多环境配置学习入门