• 剑指offer:包含min函数的栈


    题目描述:

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

    解题思路:

    相当与在保留原栈的同时,去维护一个最小栈。利用一个辅助栈来完成。对于每个新输入的数,在压入原栈的同时,需要去判断是否为最小值,若为最小指,则压入辅助栈,否则将当前最小值压入辅助栈。这样就相当于两个栈的大小是相等的,每次做push和pop操作时,二者需要同步。最后的min函数只需要取辅助栈的top就可以。

    代码:

    class Solution {
    public:
        stack<int>cur, min_stack;
        void push(int value) {
            cur.push(value);
            if(min_stack.empty())
                min_stack.push(value);
            else
            {
                if(value < min_stack.top())
                    min_stack.push(value);
                else
                    min_stack.push(min_stack.top());
            }
        }
        void pop() {
            if(!cur.empty())
            {
                cur.pop();
                min_stack.pop();
            }
            
        }
        int top() {
            if(!cur.empty())
                return cur.top();
            return 0;
        }
        int min() {
            if(!min_stack.empty())
            {
                return min_stack.top();
            }
            return 0;
        }
    };
  • 相关阅读:
    Uva455
    PAT乙级1059
    PAT乙级1092
    PAT乙级1076
    PAT乙级1065
    PAT乙级1049
    Uva1586
    《肇造区夏》读后感 读书笔记
    《老鼠虱子和历史》读后感 读书笔记
    《胡适口述自传》读后感 读书笔记
  • 原文地址:https://www.cnblogs.com/LJ-LJ/p/10599221.html
Copyright © 2020-2023  润新知