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

 

 

 

posted @ 2022-04-17 09:35  朱朱成  阅读(51)  评论(0)    收藏  举报