题目步骤是
- 从牌组顶部抽一张牌,显示它,然后将其从牌组中移出。
- 如果牌组中仍有牌,则将下一张处于牌组顶部的牌放在牌组的底部。
- 如果仍有未显示的牌,那么返回步骤 1。否则,停止行动。
得到的序列要求是递增序列。
例如 1 3 2 通过上述变换,可以得到1 2 3,满足题目要求。
解法是:1 2 3 通过上述变换,可以得到 1 3 2,即这道题的解。
代码如下:
class Solution {
public:
vector<int> deckRevealedIncreasing(vector<int>& deck) {
sort(deck.begin(),deck.end());
int ds=deck.size();
queue<int> q;
vector<int> ret(ds,-1);
for(int i=0;i<ds;i++)
q.push(i);
for(int i=0;i<ds;i++)
{
int d1=q.front();
ret[d1]=deck[i];
q.pop();
int d2=q.front();
q.push(d2);
q.pop();
}
return ret;
}
};
通过一个queue来模拟牌组,d1是抽出的牌,d2是放到牌底的牌。通过循环,满足题目要求。