【LeetCode笔记】621. 任务调度器(Java、桶)
生活随笔
收集整理的這篇文章主要介紹了
【LeetCode笔记】621. 任务调度器(Java、桶)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 題目描述
- 代碼 && 思路
- 1. 直白的 ac 做法 O(n)、O(n)
- 2. 桶排思想的做法 O(n)、O(n)
- 二刷
打卡第十六天~
題目描述
- 有點閱讀題的意思,可以結合例子理解一下題干~
代碼 && 思路
1. 直白的 ac 做法 O(n)、O(n)
- 同樣是 O(n) 復雜度,比方法2慢了不少= =,不過勝在容易想~
- wait[i]:記錄 i 的等待冷卻時間
- counts[i]:記錄 i 的剩余任務數量
- 設計思路很簡單,每次都選取當前不在冷卻的、數量最多的任務,沒有就待命即可
2. 桶排思想的做法 O(n)、O(n)
- 參考了這篇題解的做法
- 步驟一:counts[ ] 記錄各個任務的數量,維護最多任務數 maxTimes
- 步驟二:找到擁有 maxTiems 的任務種類數 maxTaskCounts
- 步驟三:根據公式計算結果:(maxTimes - 1) * (n + 1) + maxTaskCounts,如果公式結果小于 tasks.length,則選 tasks.length,否則選公式結果。
- 原理相關:直接看上面鏈接的題解吧,結合圖片方便理解,我這里就不誤人子弟了= =
- 關鍵點:
- 步驟三對應兩種情況:有待命、無待命。
- 最后一趟無需再等待 n
二刷
- 誒嘿,二刷終于是有了更好理解了,對于最后一行的return:
- 如果說數量足夠多,那么就相當于無空閑時間,直接取最大的 task.length 即可
- 如果說數量不夠,那么 length 鐵定不能取,同時也肯定小于有空閑公式的值。
- 因此總的來說,得 max !
總結
以上是生活随笔為你收集整理的【LeetCode笔记】621. 任务调度器(Java、桶)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【LeetCode笔记】232. 用栈实
- 下一篇: 【LeetCode笔记】101. 对称二