数据结构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 };


浙公网安备 33010602011771号