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

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
➤微信公衆號:山青詠芝(shanqingyongzhi)
➤博客園地址:山青詠芝(https://www.cnblogs.com/strengthen/
➤GitHub地址:https://github.com/strengthen/LeetCode
➤原文地址:http://www.javashuo.com/article/p-xpzrmuoj-me.html 
➤若是連接不是山青詠芝的博客園地址,則多是爬取做者的文章。
➤原文已修改更新!強烈建議點擊原文地址閱讀!支持做者!支持原創!
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★html

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

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

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.app

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

Example 1:this

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:spa

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

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

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

如今,重複執行如下步驟,直到顯示全部卡牌爲止:

  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]

 40ms

 1 class Solution {
 2     func deckRevealedIncreasing(_ deck: [Int]) -> [Int] {
 3         var results = [Int]()
 4         let deck = deck.sorted(by: >)
 5         for d in deck {
 6             if results.count != 0 {
 7                 let temp = results.removeFirst()
 8                 results.append(temp)
 9             }
10             results.append(d)
11         }
12         return results.reversed()
13     }
14 }

40ms

 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 }

44ms
 1 class Solution {
 2     func deckRevealedIncreasing(_ deck: [Int]) -> [Int] {
 3         let N = deck.count
 4         var stack = [Int]()
 5         for i in 0..<N {
 6             stack.append(i)
 7         }
 8         
 9         let sorted = deck.sorted { $0 < $1 }
10         var answer = Array(repeating: 0, count: N)
11         
12         for num in sorted {
13             answer[stack.removeFirst()] = num
14             
15             if !stack.isEmpty {
16                 let nextIndex = stack.removeFirst()
17                 stack.append(nextIndex)
18             }
19         }
20         
21         return answer
22     }
23 }

52ms

 1 class Solution {
 2     func deckRevealedIncreasing(_ deck: [Int]) -> [Int] {
 3         var array = Array(0..<deck.count)
 4         var res:[Int] = []
 5         let sort = deck.sorted()
 6 
 7         for _ in 0..<array.count-1{
 8             res.append(array.removeFirst())
 9             array.append(array.removeFirst())
10         }
11         res.append(array[0])
12 
13         return res.enumerated().sorted(by:{$0.element < $1.element}).map({$0.offset}).map({sort[$0]})
14     }
15 }

60ms

 1 class Solution {
 2     func deckRevealedIncreasing(_ deck: [Int]) -> [Int] {
 3         var ds = deck.sorted()
 4         var qs = [Int]()
 5         while !ds.isEmpty {
 6             if let q = qs.last {
 7                 qs.removeLast()
 8                 qs.insert(q, at: 0)
 9             }
10             let r = ds.removeLast()
11             qs.insert(r, at: 0)
12         }
13         return qs
14         
15     }
16 }

64ms

 1 class Solution {
 2     func deckRevealedIncreasing(_ deck: [Int]) -> [Int] {
 3         var sortedDeck = deck.sorted{$0<$1}
 4         if (sortedDeck.count < 3) {
 5             return sortedDeck
 6         }
 7         var res:[Int] = Array(sortedDeck[sortedDeck.count - 2..<sortedDeck.count])
 8         sortedDeck[sortedDeck.count - 2..<sortedDeck.count] = []
 9         while sortedDeck.count > 0{
10             var last = res.removeLast()
11             res.insert(last, at: 0);
12             res.insert(sortedDeck.removeLast(), at: 0)
13         }
14         return res
15     }
16 }
相關文章
相關標籤/搜索