首页 > 其他 > 详细

【剑指offer】30、包含min函数的栈

时间:2018-07-20 15:05:25      阅读:163      评论:0      收藏:0      [点我收藏+]

题目

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

思路

能够想到存储最小元素,关键是当最小元素被弹出之后,如何存储次小元素。

我们用一个辅助栈来存储。

1、当压入数字时,如果它比最小的还要小,则在辅助栈和数据栈中都压入该元素;如果它比最小元素大,则在数据栈中压入该数字,在辅助栈就依旧压入最小元素。

2、当弹出数字时,数据栈和辅助栈都弹出

3、当获得min时,直接获得栈顶元素即可

class Solution {
public:
    stack<int> data_stack, min_stack;
    void push(int value) {
        data_stack.push(value);
        if (min_stack.empty())
            min_stack.push(value);
        else{
            int temp = min_stack.top();
            temp>value? min_stack.push(value): min_stack.push(temp);
        }
    }
    void pop() {
        data_stack.pop();
        min_stack.pop();
    }
    int top() {
        return data_stack.top();
    }
    int min() {
        return min_stack.top();
    }
};

 

【剑指offer】30、包含min函数的栈

原文:https://www.cnblogs.com/shiganquan/p/9341427.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!