NC115栈和排序
NC115栈和排序
- 1、题目描述:
- 2、题目链接:
https://www.nowcoder.com/practice/95cb356556cf430f912e7bdf1bc2ec8f?tpId=117&tqId=37839&rp=1&ru=%2Factivity%2Foj&qru=%2Fta%2Fjob-code-high%2Fquestion-ranking&tab=answerKey
-3、 设计思想:
详细操作流程看下图:
-5、代码:
c++版本:
class Solution {
public:
/**
* 栈排序
* @param a int整型一维数组 描述入栈顺序
* @param aLen int a数组长度
* @return int整型vector
*/
vector<int> solve(int* a, int aLen) {
stack<int>s;//定义一个栈用来存储数据
int n = aLen;
vector<int>res;//用来返回结果
vector<bool> vis(aLen + 10,0);//用来标记哪个数字出现过
for(int i = 0;i < aLen;i ++){//遍历数组
s.push(a[i]);//压入栈
vis[a[i]] = 1;//压入一个数就把对应的数字标记为1
while(n && vis[n]) n--;//检测现有栈中有多少个数出现了就是较大的哪些数出现了(从大到小)
while(!s.empty() && n <= s.top()){
//然后将栈中>=n的元素出栈
res.push_back(s.top());
s.pop();
}
}
//如果栈没为空就按照栈中原样直接出栈
while(!s.empty()){
int temp = s.top();
res.push_back(temp);
s.pop(
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
C++岗位面试真题宝典 文章被收录于专栏
整篇专刊共分为6章,涵盖C++基础、C++操作系统、C++计算机网络、C++数据库、C++设计模式与算法面试真题。 购买须知 1、专刊报名后,在个人主页-学习-已购-专刊即可快速进入学习。2、专刊为虚拟商品,交付形式为图文,一经购买,即可解锁内容,所以概不退款。 3、专刊版权归本牛客所有,任何机构、媒体、网站或个人未经本网协议授权不得转载、链接、转贴或以其他方式复制发布/发表,违者将依法追究责任。
查看9道真题和解析