戈森莉 发表于 2025-8-12 07:42:49

剑指offer-20、包含min函数的栈

题⽬描述

定义栈的数据结构,请在该类型中实现⼀个能够得到栈中所含最⼩元素的min 函数(时间复杂度为O(1) )。
此栈包含的⽅法有:

[*]push(value) :将value 压⼊栈中
[*]pop() :弹出栈顶元素
[*]top() :获取栈顶元素
[*]min() :获取栈中最⼩元素
思路及解答

双栈法(推荐,实现简单)

使用两个栈:

[*]​主栈​:存储所有元素
[*]​辅助栈​:存储当前主栈中的最小值
push ⼀个元素的时候,都需要push 进datas stack ,但是push 进⼊mins stack 需要满⾜条件:当前的mins stack 是空的,直接放⼊。或者当前的mins stack 的栈顶元素⼤于或者等于push 进来的值。
pop ⼀个元素的时候,如果栈为空则什么都不操作,如果栈不为空,则判断datas 的第⼀个元素是否和mins 的第⼀个元素相等。如果相等的话那么就需要将mins 和datas pop 出去第⼀个元素,否则只需要将datas 的第⼀个元素 pop 出去即可。
public class Solution {        private Stack datas = new Stack();        private Stack mins = new Stack();        /​**​   * 将元素压入栈中   * @param value 要压入的值   */        public void push(int node) {                datas.push(node);                // 如果辅助栈为空,或新值
页: [1]
查看完整版本: 剑指offer-20、包含min函数的栈