題目出處
難度
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
直接數學運算出來
