• 剑指OFFER之包含min函数的栈


    题目描述:

    定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。

     

    输入:

    输入可能包含多个测试样例,输入以EOF结束。
    对于每个测试案例,输入的第一行为一个整数n(1<=n<=1000000), n代表将要输入的操作的步骤数。
    接下来有n行,每行开始有一个字母Ci。
    Ci=’s’时,接下有一个数字k,代表将k压入栈。
    Ci=’o’时,弹出栈顶元素。

     

    输出:

    对应每个测试案例中的每个操作,
    若栈不为空,输出相应的栈中最小元素。否则,输出NULL。

     

    样例输入:
    7
    s 3
    s 4
    s 2
    s 1
    o
    o
    s 0
    样例输出:
    3
    3
    2
    1
    2
    3
    0

    Code:
    #include <iostream>
    #include <cstdio>
    #include <stack>
     
    using namespace std;
     
    int main()
    {
        int n;
        char operation;
        stack<int> stack1,stack2;
        while(cin>>n){
            int k,minVal;
            bool isFirst=true;
            getchar();
            while(stack1.empty()==false)
                stack1.pop();
            while(stack2.empty()==false)
                stack2.pop();
            for(int cnt=0;cnt<n;++cnt){
                cin>>operation;
                if(operation=='s'){
                    cin>>k;
                    if(isFirst){
                        minVal=k;
                        isFirst=false;
                    }else{
                        if(k<minVal)
                            minVal=k;
                    }
                    cout<<minVal<<endl;
                    stack1.push(k);
                    stack2.push(minVal);
                }
                if(operation=='o'){
                    if(stack1.empty()==true&&stack2.empty()==true){
                        cout<<"NULL"<<endl;
                        isFirst=true;           //当stack为空的时候要把isFirst重新置为true
                    }else{
                        stack1.pop();           //题目要求是先出栈,再把栈顶元素输出
                        stack2.pop();
                        if(stack1.empty()==true&&stack2.empty()==true){  //这个时候2个stack还是有可能为空
                            cout<<"NULL"<<endl;
                            isFirst=true;
                        }else{
                            int topVal=stack2.top();
                            minVal=topVal;     //修改栈顶元素弹出后stack2中的最小值
                            cout<<topVal<<endl;
                        }
                    }
                }
            }
        }
        return 0;
    }
     
    /**************************************************************
        Problem: 1522
        User: lcyvino
        Language: C++
        Result: Accepted
        Time:120 ms
        Memory:1524 kb
    ****************************************************************/
  • 相关阅读:
    Windows phone 应用开发系列教程(更新中)
    ios实例开发精品文章推荐(8.14)
    Android开发环境——调试器 DDMS相关内容汇总
    docker 发布应用时添加 git revision
    docker环境下数据库的备份(postgresql, mysql)
    golang web 方案
    golang 1.12 自动补全
    区块链简介
    天空的另一半
    Ecto中的changeset,schema,struct,map
  • 原文地址:https://www.cnblogs.com/Murcielago/p/4185580.html
Copyright © 2020-2023  润新知