题解 | #栈和排序#

栈和排序

http://www.nowcoder.com/practice/95cb356556cf430f912e7bdf1bc2ec8f

图片说明

题解:由于数字在1-n之间,对数组遍历,对已访问的数组将vis[i]置true,没访问的vis[i]为false。
统计a[i]后面的最大值,vis从n=aLen开始统计,第一个为false的就是a[i]后面的最大值。
如果数组后面的最大值比栈顶元素小,就弹出栈顶元素直到不符合条件
当遍历完栈非空就按序弹出栈所有元素,得到最终结果。

class Solution {
public:
    /**
     * 栈排序
     * @param a int整型一维数组 描述入栈顺序
     * @param aLen int a数组长度
     * @return int整型vector
     */
    vector<int> solve(int* a, int aLen) {
        // write code here

        stack<int>st;
        vector<int>res;
        vector<bool>vis(aLen+1,0);
        int n=aLen,i=0;
        while(i<aLen)
        {
            vis[a[i]]=1;
            st.push(a[i]);
            while(n && vis[n])n--;//寻找数组后面的最大值
            while(!st.empty() && n<st.top())//如果数组后面的最大值比栈顶小,弹出栈顶
            {
                res.push_back(st.top());
                st.pop();
            }
            i++;
        }
        while(!st.empty()){res.push_back(st.top());st.pop();}
        return res;
    }
};
全部评论

相关推荐

09-13 08:41
服装/纺织设计
那一天的Java_J...:你第一次参加面试吗
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
正在热议
更多
# 你的mentor是什么样的人? #
4418次浏览 33人参与
# 你觉得mentor喜欢什么样的实习生 #
10659次浏览 297人参与
# 平安产险科技校招 #
2425次浏览 0人参与
# 帮我看看,领导说这话什么意思? #
6595次浏览 26人参与
# 26届秋招公司红黑榜 #
13069次浏览 44人参与
# 怎么给家人解释你的工作? #
1587次浏览 17人参与
# 智慧芽求职进展汇总 #
25852次浏览 110人参与
# 没有家庭托举的我是怎么找工作的 #
12612次浏览 160人参与
# 求职低谷期你是怎么度过的 #
5394次浏览 96人参与
# 实习必须要去大厂吗? #
146803次浏览 1541人参与
# 从哪些方向判断这个offer值不值得去? #
6719次浏览 95人参与
# 同bg的你秋招战况如何? #
158865次浏览 927人参与
# 度小满求职进展汇总 #
10191次浏览 53人参与
# 校招泡的最久的公司是哪家? #
4794次浏览 23人参与
# 面试紧张时你会有什么表现? #
1782次浏览 21人参与
# 你有哪些缓解焦虑的方法? #
37196次浏览 835人参与
# 你喜欢工作还是上学 #
77610次浏览 860人参与
# 入职第一天,你准备什么时候下班 #
85510次浏览 467人参与
# 秋招想进国企该如何准备 #
97743次浏览 487人参与
# 简历无回复,你会继续海投还是优化再投? #
103613次浏览 819人参与
# 机械人的工作环境真的很差吗 #
25075次浏览 119人参与
# 独居后,你的生活是更好了还是更差了? #
28145次浏览 263人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务