LeetCode 1834. 单线程 CPU(排序 + 优先队列)
生活随笔
收集整理的這篇文章主要介紹了
LeetCode 1834. 单线程 CPU(排序 + 优先队列)
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
文章目錄
- 1. 題目
- 2. 解題
1. 題目
給你一個(gè)二維數(shù)組 tasks ,用于表示 n?????? 項(xiàng)從 0 到 n - 1 編號的任務(wù)。
其中 tasks[i] = [enqueueTimei, processingTimei] 意味著第 i?????????? 項(xiàng)任務(wù)將會(huì)于 enqueueTimei 時(shí)進(jìn)入任務(wù)隊(duì)列,需要 processingTimei 的時(shí)長完成執(zhí)行。
現(xiàn)有一個(gè)單線程 CPU ,同一時(shí)間只能執(zhí)行 最多一項(xiàng) 任務(wù),該 CPU 將會(huì)按照下述方式運(yùn)行:
- 如果 CPU 空閑,且任務(wù)隊(duì)列中沒有需要執(zhí)行的任務(wù),則 CPU 保持空閑狀態(tài)。
- 如果 CPU 空閑,但任務(wù)隊(duì)列中有需要執(zhí)行的任務(wù),則 CPU 將會(huì)選擇 執(zhí)行時(shí)間最短 的任務(wù)開始執(zhí)行。如果多個(gè)任務(wù)具有同樣的最短執(zhí)行時(shí)間,則選擇下標(biāo)最小的任務(wù)開始執(zhí)行。
- 一旦某項(xiàng)任務(wù)開始執(zhí)行,CPU 在 執(zhí)行完整個(gè)任務(wù) 前都不會(huì)停止。
- CPU 可以在完成一項(xiàng)任務(wù)后,立即開始執(zhí)行一項(xiàng)新任務(wù)。
返回 CPU 處理任務(wù)的順序。
示例 1: 輸入:tasks = [[1,2],[2,4],[3,2],[4,1]] 輸出:[0,2,3,1] 解釋:事件按下述流程運(yùn)行: - time = 1 ,任務(wù) 0 進(jìn)入任務(wù)隊(duì)列,可執(zhí)行任務(wù)項(xiàng) = {0} - 同樣在 time = 1 ,空閑狀態(tài)的 CPU 開始執(zhí)行任務(wù) 0 ,可執(zhí)行任務(wù)項(xiàng) = {} - time = 2 ,任務(wù) 1 進(jìn)入任務(wù)隊(duì)列,可執(zhí)行任務(wù)項(xiàng) = {1} - time = 3 ,任務(wù) 2 進(jìn)入任務(wù)隊(duì)列,可執(zhí)行任務(wù)項(xiàng) = {1, 2} - 同樣在 time = 3 ,CPU 完成任務(wù) 0 并開始執(zhí)行隊(duì)列中用時(shí)最短的任務(wù) 2 ,可執(zhí)行任務(wù)項(xiàng) = {1} - time = 4 ,任務(wù) 3 進(jìn)入任務(wù)隊(duì)列,可執(zhí)行任務(wù)項(xiàng) = {1, 3} - time = 5 ,CPU 完成任務(wù) 2 并開始執(zhí)行隊(duì)列中用時(shí)最短的任務(wù) 3 ,可執(zhí)行任務(wù)項(xiàng) = {1} - time = 6 ,CPU 完成任務(wù) 3 并開始執(zhí)行任務(wù) 1 ,可執(zhí)行任務(wù)項(xiàng) = {} - time = 10 ,CPU 完成任務(wù) 1 并進(jìn)入空閑狀態(tài)示例 2: 輸入:tasks = [[7,10],[7,12],[7,5],[7,4],[7,2]] 輸出:[4,3,2,0,1] 解釋:事件按下述流程運(yùn)行: - time = 7 ,所有任務(wù)同時(shí)進(jìn)入任務(wù)隊(duì)列,可執(zhí)行任務(wù)項(xiàng) = {0,1,2,3,4} - 同樣在 time = 7 ,空閑狀態(tài)的 CPU 開始執(zhí)行任務(wù) 4 ,可執(zhí)行任務(wù)項(xiàng) = {0,1,2,3} - time = 9 ,CPU 完成任務(wù) 4 并開始執(zhí)行任務(wù) 3 ,可執(zhí)行任務(wù)項(xiàng) = {0,1,2} - time = 13 ,CPU 完成任務(wù) 3 并開始執(zhí)行任務(wù) 2 ,可執(zhí)行任務(wù)項(xiàng) = {0,1} - time = 18 ,CPU 完成任務(wù) 2 并開始執(zhí)行任務(wù) 0 ,可執(zhí)行任務(wù)項(xiàng) = {1} - time = 28 ,CPU 完成任務(wù) 0 并開始執(zhí)行任務(wù) 1 ,可執(zhí)行任務(wù)項(xiàng) = {} - time = 40 ,CPU 完成任務(wù) 1 并進(jìn)入空閑狀態(tài)提示: tasks.length == n 1 <= n <= 10^5 1 <= enqueueTimei, processingTimei <= 10^9https://leetcode-cn.com/contest/weekly-contest-237/problems/single-threaded-cpu/
2. 解題
- 先按時(shí)間排序任務(wù),將任務(wù)加入優(yōu)先隊(duì)列
- 優(yōu)先隊(duì)列出列的時(shí)候,更新當(dāng)前時(shí)間,然后將到時(shí)間了的,需要執(zhí)行的任務(wù)加入優(yōu)先隊(duì)列,重復(fù)此步驟
576 ms 112.1 MB C++
我的CSDN博客地址 https://michael.blog.csdn.net/
長按或掃碼關(guān)注我的公眾號(Michael阿明),一起加油、一起學(xué)習(xí)進(jìn)步!
總結(jié)
以上是生活随笔為你收集整理的LeetCode 1834. 单线程 CPU(排序 + 优先队列)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LeetCode 2071. 你可以安排
- 下一篇: LeetCode 1971. Find