zoukankan      html  css  js  c++  java
  • 30 包含min函数的栈(举例让抽象问题具体化)

    题目描述:

    定义栈的数据结构(push/pop),请在该类型中实现一个能够得到栈中所含最小元素的min函数(三者的时间复杂度都应为O(1))。

    测试用例:

     1)新压入栈的数字比之前的最小值大/小

     2)弹出的数字不是最小的元素/是最小的元素

    解题思路:

    1)借助辅助栈存储最小值,辅助栈顶一定都当前栈的最小值

    class Solution {
    public:
        void push(int value) {
            if(data.empty()){
                data.push(value);
                minValue.push(value);  // 是一样的A
            }else{ //不为空的时候要寻找最小值,添加到辅助栈中
                data.push(value);
                if(value<minValue.top())
                    minValue.push(value);  // 是一样的A 
                else
                    minValue.push(minValue.top());
            }
            /*
            比较简单的判断方法
            data.push(value);
            if(data.empty() || value<minValue.top()){
                 minValue.push(value); 
            }else{
                minValue.push(minValue.top());
            }
            */
        }
        void pop() { //既要删除数据栈的栈顶元素,也要删除辅助栈的栈顶元素
            //assert(data.size()>0 && minValue.size()>0);
            if(data.empty())
                return;
            data.pop();//用判断栈为空么??
            minValue.pop();
        }
        int top() { //访问数据栈顶
            return data.top();
        }
        int min() { //访问辅助栈顶  考虑栈为空的时候
            //assert(data.size()>0 && minValue.size()>0);
            if(data.empty())
                return; //实际上应该报错
            return minValue.top();
        }
        
    private:
        stack<int> data;
        stack<int> minValue;
    };
    

    2)使用key-value对存储

    class Solution {
        typedef pair<int, int> pii;
        stack<pii> s;
    public:
        void push(int value) {
            s.push(pii(value, ::min(value, s.empty() ? value : min()) )); //min()是自己定义的函数s.top().second;
        }
        void pop() {
            s.pop();
        }
        int top() {
            return s.top().first;
        }
        int min() {
            return s.top().second;
        }
    };
    

      

      

  • 相关阅读:
    俞敏洪谈大学爱情:终于在清华说实话了
    人的有两面性
    冯亚丽,打造1500亿帝国的奇女子
    做企业就要有精气神
    当心!“饭桌教育”祸害你的孩子
    为何企业宁可高薪招人,也不给老员工加薪?
    住的离公司有多远,成长就有多难
    物理像素,逻辑像素,解决1px的问题
    移动端布局 + iscroll + 滚动事件
    移动端布局 + iscroll.js
  • 原文地址:https://www.cnblogs.com/GuoXinxin/p/10449574.html
Copyright © 2011-2022 走看看