程序员代码面试指南1.1:设计getMin功能的栈

设计getMin功能的栈

http://www.nowcoder.com/practice/05e57ce2cd8e4a1eae8c3b0a7e9886be

思路

用两个栈来实现,其中一个作为最小栈,操作思路:

  1. push时,只有最小栈为空或者当前元素 ≤ 最小栈顶元素时,才push到最小栈中;
  2. pop时,只有栈顶元素等于最小栈顶元素时,才将最小栈顶元素弹出。

由于数据保证没有不合法的操作,这里就不做判空异常了。

#include <iostream>
#include <string>
#include <stack>

using namespace std;

stack<int> stk, stkMin;

int getMin()
{
    return stkMin.top();
}

void push(int num)
{
    if (stkMin.empty()) stkMin.push(num);            //最小栈为空
    else if (num <= getMin()) stkMin.push(num);        //当前元素 ≤ 最小栈顶元素

    stk.push(num);
}

void pop()
{    
    int num = stk.top();
      stk.pop();

    if (num == getMin())        //栈顶元素等于最小栈顶元素
    {
        stkMin.pop();
    }
}

int main()
{
    int n;
    cin >> n;

    while (n -- )
    {
        string s;
        cin >> s;

        if (s == "push")        //push操作还需要额外读入一个数字
        {
            int num;
            cin >> num;
            push(num);
        }
        else if (s == "pop")
        {
            pop();
        }
        else                    //只有getMin操作需要输出
        {
            cout << getMin() << endl;
        }
    }

    return 0;
}

主要是为左程云的《程序员代码面试指南》这本书改写C++版的题解。

全部评论

相关推荐

03-07 13:32
门头沟学院 C++
D0cC:你是本科生吗,太厉害了
点赞 评论 收藏
分享
02-23 00:10
湖南大学 C++
点赞 评论 收藏
分享
评论
1
1
分享

创作者周榜

更多
牛客网
牛客企业服务