题解 | #栈和排序#

栈和排序

https://ac.nowcoder.com/acm/contest/22669/A

**题目描述 **

给你一个1->n的排列和一个栈,入栈顺序给定 你要在不打乱入栈顺序的情况下,对数组进行从大到小排序 当无法完全排序时,请输出字典序最大的出栈序列。

输入描述:

第一行一个数n 第二行n个数,表示入栈的顺序,用空格隔开,结尾无空格。

#include <iostream>
#include <vector>
#include <stack>
#include <algorithm>

const int length=1e+6;
class mySolution{
public:
    void printResult(std::vector<int> nums){
        int maxValue[length]={0};
        for(int i=nums.size()-1;i>=0;i--){
            maxValue[i]=std::max(maxValue[i+1],nums[i]);
        }
        std::stack<int> stack;
        for(int i=0;i<nums.size();i++){
            stack.push(nums[i]);
            while(!stack.empty()&&stack.top()>maxValue[i+1]){
                std::cout<<stack.top()<<' ';
                stack.pop();
            }
        }
    }
};

int main(){
    mySolution*solution=new mySolution();
    std::vector<int> nums;
    int n=0;
    std::cin>>n;
    while(n--){
        int val;
        std::cin>>val;
        nums.push_back(val);
    }
    solution->printResult(nums);
    return 0;    
}
全部评论

相关推荐

对空六翼:你真幸运,碰见这么好的人,不像我,秋招的时候被室友骗进cx了
实习好累,可以辞职全力准...
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务