題目描述: 有一副牌,要求重新排列牌組,使得按照以下規則翻牌時,翻出的順序是遞增的:翻開最上面的牌,然後把下一張牌移到底部,重複此過程直到所有牌翻完。
解題思路:
時間複雜度:O(n log n) — 排序為瓶頸,佇列模擬為 O(n)
空間複雜度:O(n) — 佇列和結果陣列
1. Sort deck in ascending order 2. Create a deque of indices [0, 1, 2, ..., n-1] 3. For i = 0 to n-1: a. Place deck[i] at position indices.front() in result b. Pop front index c. If deque not empty: move front to back (simulate the "move to bottom" step) 4. Return result
逆向模擬:從最大的牌開始,反向模擬。維護一個雙端佇列存結果,每次從尾部移一張牌到頭部,然後把當前最大的牌放到頭部。最終佇列就是答案。直覺上更好理解「逆轉」過程。
遞迴分治:將問題拆成子問題。第一個位置放最小牌,然後遞迴處理剩餘位置(奇偶交替)。時間複雜度相同但實作較複雜。