前往
大廳
主題

LeetCode - 0950. Reveal Cards In Increasing Order 解題心得

Not In My Back Yard | 2024-05-21 12:00:01 | 巴幣 0 | 人氣 40

題目連結:


題目意譯:
你被給定一個整數陣列 deck。現在有一疊卡牌,其中每一張卡牌上都有著獨一無二的整數。第 i 張卡牌上的整數為 deck[i]。

你可以將 deck 的數字任意排列。一開始,牌組(Deck)中的卡牌都是面朝下的(即尚未揭露)。

你將會重複執行以下步驟直到所有卡牌被揭露為止:
    1. 將牌組「頂端」的卡牌拿起並揭露。接著將該卡牌從牌組中移出;
    2. 如果牌組中還有卡牌,則將「下一個」頂端的卡牌移至牌組的「底部」;
    3. 如果牌組中還有未被揭露的卡牌,則回到步驟 1.;反之則停下。

回傳一個可以讓牌組中的卡牌按照升序順序來被揭露之 deck 之排列。

注意到答案中的第一個數字視為牌組的「頂端」。

限制:
1 ≦ deck.length ≦ 1000
1 ≦ deck[i] ≦ 10 ^ 6
deck 中的數字彼此相異。



範例測資:
範例 1:
輸入: deck = [17,13,11,2,3,5,7]
輸出: [2,13,3,11,5,17,7]
解釋:
我們得到的牌組順序為 [17,13,11,2,3,5,7](這個順序不重要),然後我們將其重新排列。
重新排列後,牌組變成 [2,13,3,11,5,17,7],其中 2 是牌組的「頂端」。
我們揭露出 2,並把 13 移動到底部。牌組現在變成 [3,11,5,17,7,13]。
我們揭露出 3,並把 11 移動到底部。牌組現在變成 [5,17,7,13,11]。
我們揭露出 5,並把 17 移動到底部。牌組現在變成 [7,13,11,17]。
我們揭露出 7,並把 13 移動到底部。牌組現在變成 [11,17,13]。
我們揭露出 11,並把 17 移動到底部。牌組現在變成 [13,17]。
我們揭露出 13,並把 17 移動到底部。牌組現在變成 [17]。
我們揭露出 17。
由於所有卡牌是按升序順序來揭露的,因此這個答案是對的。

範例 2:
輸入: deck = [1,1000]
輸出: [1,1000]


解題思維:
反著推即可。

以範例一的「解釋」為例:
最後是揭露出 17,所以牌組最後要是 [17];
(這邊省略一個移動到底部的動作,因為只有一個數字)
倒數第二個是 13,所以牌組此時要是 [13,17];
「把頂端的數字移動到底部」反過來是「把底部的數字移動到頂端」,因此牌組此時應為 [17,13];
接著倒數第三個揭露的是 11,因此牌組應為 [11,17,13];
以此類推。故得如下:
[13,11,17] →
[7,13,11,17] →
[17,7,13,11] →
[5,17,7,13,11] →
[11,5,17,7,13] →
[3,11,5,17,7,13] →
[13,3,11,5,17,7] →
[2,13,3,11,5,17,7]
便可以得到答案。

而其他例子也是同理,即將 deck 由大排到小並依序加入到牌組中。而每加入一個數字「之前」需要把底部的數字移動到頂端。所有數字加完之後的牌組即為所求。




此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。

創作回應

相關創作

更多創作