資料結構LeetCode:950.按遞增順序顯示卡牌
阿新 • • 發佈:2022-04-17
950.按遞增順序顯示卡牌
思路是,反過來想,我們只知道最後輸出的結果,是本來序列的遞增形式,要求解出這個這種牌組順序。可以定義一個表示下標佇列deque<int>num,外層一層迴圈表示排序後的序列deck陣列逐一遍歷,則ans[num.front]=deck[1],ans中第一個出隊的一定是最小的,此時把ans第二個插入到最後一個,則第二個出列的就是第三個,重複這個過程,則求解。把ans第二個尾插到最後一個,我們只要把下標佇列的第二個取出來尾插即可。所以關鍵就是下標佇列deque.
我的程式碼:
1 class Solution { 2 public: 3vector<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 };