LC 950. Reveal Cards In Increasing Order
https://leetcode.com/problems/reveal-cards-in-increasing-order/
这题目还蛮有意思的,解决方法是逆向推导。先观察例子,然后总结出一般规律。
假设目标序列是 1,2,3,4,5,6,7. 从尾部开始考虑
- 7就是7, 6,7 就是 6,7. 这是基本情况,看不出任何规律。
- 5,6,7 为了保证取5之后是6,7, 那么需要变成7,6,所以就是 5 7 6
- 4,5,6,7 为了保证取4之后是 5 7 6, 那么需要将6放在最前面,所以就是 4 6 5 7
- 3 7 4 6 5
- 2 5 3 7 4 6
- 1 6 2 5 3 7 4
假设我们现在要取x, 之后序列是S的话,那么要求序列就是 x + S[-1] + S[:-1].
class Solution: def deckRevealedIncreasing(self, deck: List[int]) -> List[int]: from collections import deque dq = deque() deck = sorted(deck) n = len(deck) dq.append(deck[-1]) for i in reversed(range(n - 1)): v = deck[i] x = dq.pop() dq.appendleft(x) dq.appendleft(v) ans = list(dq) return ans