【Leetcode】python - [621] Task Scheduler 個人解法筆記

題目出處

621. Task Scheduler

難度

medium

個人範例程式碼

class Solution:
    def leastInterval(self, tasks: List[str], n: int) -> int:
        counter = Counter(tasks)
        collect_counts = sorted(counter.values(), reverse = True)

        # same_max_length + (max_count-1) * (1+n)
        same_max_length = collect_counts.count(collect_counts[0])
        max_length = same_max_length + (collect_counts[0] - 1) * (n + 1)

        return max(max_length, len(tasks)) # min length

最近在練習程式碼本身就可以自解釋的 Coding style,可以嘗試直接閱讀程式碼理解

算法說明

這題的答案可以直接用數學公式導出來,個人認為對面試準備的幫助比較不大。

分析答案的分佈,我們可以知道「最大數量對於結果有一定程度的影響」,
而繼續往下推,我們可以知道最小長度等於 = 「同樣的最大數量」+ 「(n+1) * (最大數量 -1)」

不懂在說什麼的話,就看下圖吧:

input handling

x

Boundary conditions

直接數學運算出來

Reference