剑指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
 
 
原文地址:https://www.cnblogs.com/alan-W/p/14280183.html