2020-04-13

剑指offer编程题——栈

包含min函数的栈

思路:一个栈用来实现正常的栈操作,另一个栈保存当前栈的最小值

比如将5,7,6,3,9,1依次输入栈中

栈1: 5,7,6,3,9,1

栈2:5,3,1

栈2只用保存比当前栈顶元素小的元素,当执行出栈操作时,判断一下栈2的栈顶元素是否和栈1的出栈元素相同,若元素相同,则将栈2的栈顶元素出栈。

class Solution {

private:

    stack<int> sk1;

    stack<int> sk2;

    //用两个栈实现,一个栈实现正常的栈功能,另一个栈保存栈的当前最小值

public:

    void push(int value) {

        sk1.push(value);

        if(sk2.empty())

        { sk2.push(value);

        }

        else

        {

            if(value<sk2.top())

            {

                sk2.push(value);

            }

        }

    }

    void pop() {

        if(!sk1.empty()&&!sk2.empty())

        {

            int top_val = sk1.top();

            sk1.pop();

            if(sk2.top()==top_val)

            {

                sk2.pop();

            }

        }

    }

    int top() {

        return sk1.top();

    }

    int min()

    { 

        return sk2.top();

    }

};

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 今天学习了关于指针的使用方式,指针在C语言之中有很重大的意义,而且指针可以替换以前学过的交换数据的功能 且功能更加...
    Sergey_2ab6阅读 145评论 0 0
  • 今天学习了指针,int a,指针就是创建a空间的位置编号。在一维数组中*a就是第一个数的指针, 在二维数组中*a[...
    眸若含秋水丶阅读 71评论 0 0
  • 1.指针的基本使用 #include #include void Test1() { char strArr[...
    王子言_853c阅读 140评论 0 0
  • 动机—行动的“鸡血” 在第二课的技能分解、迁移上我又卡壳了,写废了好几张纸,似乎都不满意自己的技能分解,感...
    果果0857阅读 253评论 0 1
  • 想要个灶间,给年味添一把火 年,有些远去了,像蒲公英种子,被风带走,随遇而安。 年,有些平淡了,过年才有的味道融入...
    淡然心阅读 338评论 0 1