码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2018-07-20 15:17:36      阅读:182      评论:0      收藏:0      [点我收藏+]

标签:tac   辅助   style   数据结构   turn   最小   复杂度   思路   ack   

题目

定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的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函数的栈

标签:tac   辅助   style   数据结构   turn   最小   复杂度   思路   ack   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!