看到 `n ≤ 8` 這種超小的數字,可以大膽猜測時間複雜度裡有個 `n!`;再看到題目要求「最大化...最短間隔」,這有 95% 以上是在考「對答案二分搜」。
分析完這兩個考點,題目基本上就迎刃而解了。
整體策略是,先枚舉所有 `n!` 種可能的工作排列順序。
對於每一種固定的順序,我們再去尋找這個順序下,能達到的最大「最短間隔」是多少。這個尋找過程就交給二分搜來處理。
二分搜的核心在於 `check(x)` 函數:給定一個間隔 `x`,我們能否在滿足所有工作的最早開始和最晚結束時間下,以不小於 `x` 的間隔排完所有工作?
這個檢查可以貪心地在 O(n) 時間內完成。
最後,我們取所有 `n!` 種排列中算出的最大值,即為本題的最終答案。
實作細節與程式碼見完整題解:2. 列印工廠