zoukankan      html  css  js  c++  java
  • 【剑指offer 包含min函数的栈】

    题目描述

    定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。
    注意:保证测试中不会当栈为空的时候,对栈调用pop()或者min()或者top()方法。
     
    构建两个栈 st 、 min_st
    st保存所有的元素,按照进栈出栈的顺序
    min_st只保存栈底  以及比栈底小的元素(为了min()函数)
     
    出栈的时候,st正常弹出
    需要判断的是st的顶是否和min_st的顶相同,如果相同,min_st也需要弹
     
    入栈的时候,st正常压
    min_st如果为空,压栈,如果元素比顶小,也压栈
     
    class Solution {
    private:
        /*
        st里面保存所有的 按照进栈出栈操作
        min_st只保存比栈底小的元素  即只保存比第一个入栈元素小的元素
        这样min_st最上都是 最小的元素
        */
        stack<int> st ;
        stack<int> min_st;
        
    public:
        void push(int value) {
            st.push(value);
            if(min_st.empty()){min_st.push(value); return;}
            if(!min_st.empty() && value < min_st.top()){
                min_st.push(value); //加进去 这样min_st顶上的都是最小的  一次往下增
                return ;
            }
            return ;
        }
        void pop() {
            if(st.top() == min_st.top())min_st.pop();
            st.pop();
            
        }
        int top() {
            return st.top();
        }
        int min() {
            return min_st.top();
        }
    };
  • 相关阅读:
    洛谷 P3413 【萌数】
    ANOI 2009 【同类分布】
    概率编程语言
    人类的视觉能力基本上是出生后逐渐习得的
    关“视觉神经系统是怎么形成的?”的思考
    MIPS指令集相关
    zookeeper源码之服务端
    zookeeper服务端
    c语言之结构
    c语言之函数
  • 原文地址:https://www.cnblogs.com/Stephen-Jixing/p/13125169.html
Copyright © 2011-2022 走看看