1. 程式人生 > >[Swift Weekly Contest 113]LeetCode950. 按遞增順序顯示卡牌 | Reveal Cards In Increasing Order

[Swift Weekly Contest 113]LeetCode950. 按遞增順序顯示卡牌 | Reveal Cards In Increasing Order

顯示卡 func rem 解釋 put var next length sid

In a deck of cards, every card has a unique integer. You can order the deck in any order you want.

Initially, all the cards start face down (unrevealed) in one deck.

Now, you do the following steps repeatedly, until all cards are revealed:

  1. Take the top card of the deck, reveal it, and take it out of the deck.
  2. If there are still cards in the deck, put the next top card of the deck at the bottom of the deck.
  3. If there are still unrevealed cards, go back to step 1. Otherwise, stop.

Return an ordering of the deck that would reveal the cards in increasing order.

The first entry in the answer is considered to be the top of the deck.

Example 1:

Input: [17,13,11,2,3,5,7]
Output: [2,13,3,11,5,17,7]
Explanation: 
We get the deck in the order [17,13,11,2,3,5,7] (this order doesn‘t matter), and reorder it.
After reordering, the deck starts as [2,13,3,11,5,17,7], where 2 is the top of the deck.
We reveal 2, and move 13 to the bottom.  The deck is now [3,11,5,17,7,13].
We reveal 3, and move 11 to the bottom.  The deck is now [5,17,7,13,11].
We reveal 5, and move 17 to the bottom.  The deck is now [7,13,11,17].
We reveal 7, and move 13 to the bottom.  The deck is now [11,17,13].
We reveal 11, and move 17 to the bottom.  The deck is now [13,17].
We reveal 13, and move 17 to the bottom.  The deck is now [17].
We reveal 17.
Since all the cards revealed are in increasing order, the answer is correct.

Note:

  1. 1 <= A.length <= 1000
  2. 1 <= A[i] <= 10^6
  3. A[i] != A[j] for all i != j

牌組中的每張卡牌都對應有一個唯一的整數。你可以按你想要的順序對這套卡片進行排序。

最初,這些卡牌在牌組裏是正面朝下的(即,未顯示狀態)。

現在,重復執行以下步驟,直到顯示所有卡牌為止:

  1. 從牌組頂部抽一張牌,顯示它,然後將其從牌組中移出。
  2. 如果牌組中仍有牌,則將下一張處於牌組頂部的牌放在牌組的底部。
  3. 如果仍有未顯示的牌,那麽返回步驟 1。否則,停止行動。

返回能以遞增順序顯示卡牌的牌組順序。

答案中的第一張牌被認為處於牌堆頂部。

示例:

輸入:[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。
由於所有卡片都是按遞增順序排列顯示的,所以答案是正確的。

提示:

  1. 1 <= A.length <= 1000
  2. 1 <= A[i] <= 10^6
  3. 對於所有的 i != jA[i] != A[j]

72ms

 1 class Solution {
 2     func deckRevealedIncreasing(_ deck: [Int]) -> [Int] {
 3         var n:Int = deck.count
 4         var deck:[Int] = deck.sorted(by:<)
 5         var q:[Int] = [Int]()
 6         for i in (0...(n - 1)).reversed()
 7         {
 8             if i < n-1
 9             {
10                 q.insert(q.removeLast(), at: 0)
11             }
12             q.insert(deck[i], at: 0)
13         }
14         var p:Int = 0
15         var ret:[Int] = [Int](repeating:0,count:n)
16         for x in q
17         {
18             ret[p] = x
19             p += 1
20         }
21         return ret
22     }
23 }

[Swift Weekly Contest 113]LeetCode950. 按遞增順序顯示卡牌 | Reveal Cards In Increasing Order