剑指offer JZ-20

题目描述

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

 

 

思路:

比较水的题目。

一般而言找到栈内最小值,需要遍历栈,此时时间复杂度为O(n)

为了达到O(1)的时间复杂度,我们可以采用空间换时间的策略:

额外维护一个栈min_list,当push进新元素时比较新元素和min_list栈顶元素的大小,将较小的值压入min_list

这样,min_list的栈顶总会记录着当前栈内的最小值

class Solution {
public:
    stack<int> list;
    stack<int> min_list;
    void push(int value) {
        if(list.size()==0)
        {
            min_list.push(value);
            list.push(value);
            return;
        }
        int temp = list.top();
        if(temp > value)
            min_list.push(value);
        else
            min_list.push(temp);
        list.push(value);
    }
    void pop() {
        list.pop();
        min_list.pop();
    }
    int top() {
        return list.top();
    }
    int min() {
        return min_list.top();
    }
};
View Code

 

 
 
posted @ 2021-01-15 00:41  声声醉如兰  阅读(65)  评论(0编辑  收藏  举报