1. 程式人生 > 其它 >資料結構LeetCode:950.按遞增順序顯示卡牌

資料結構LeetCode:950.按遞增順序顯示卡牌

950.按遞增順序顯示卡牌

 

   思路是,反過來想,我們只知道最後輸出的結果,是本來序列的遞增形式,要求解出這個這種牌組順序。可以定義一個表示下標佇列deque<int>num,外層一層迴圈表示排序後的序列deck陣列逐一遍歷,則ans[num.front]=deck[1],ans中第一個出隊的一定是最小的,此時把ans第二個插入到最後一個,則第二個出列的就是第三個,重複這個過程,則求解。把ans第二個尾插到最後一個,我們只要把下標佇列的第二個取出來尾插即可。所以關鍵就是下標佇列deque.

  我的程式碼:

 1 class Solution {
 2 public:
 3
vector<int> deckRevealedIncreasing(vector<int>& deck) { 4 int n = deck.size(); 5 sort(deck.begin(), deck.end()); 6 vector<int>ans(n); 7 deque<int>num(n); 8 for (int i = 0; i < n; ++i)num[i] = i;//代表次序的佇列 利用到了deque的容易移動的性質,且可以訪問下標
9 int be = 0; 10 for (int i = 0; i < n; ++i) 11 { 12 ans[num.front()] = deck[i]; 13 num.pop_front(); 14 if (!num.empty()) 15 { 16 num.push_back(num.front()); 17 num.pop_front(); 18 }
19 20 } 21 return ans; 22 } 23 };