面试题21:包含min函数的栈

题目描述

定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。

代码实现

import java.util.Stack;

public class Solution {

    Stack<Integer> stack = new Stack();
    Stack<Integer> min = new Stack();
    
    public void push(int node) {
        stack.push(node);
        if(min.isEmpty() || node <= min.peek())
            min.push(node);
        else
            min.push(min.peek());
    }
    
    public void pop() {
        stack.pop();
        min.pop();
    }
    
    public int top() {
        return stack.peek();
    }
    
    public int min() {
        return min.peek();
    }
}

主要思路

1、这道题需要用到两个栈,一个是数据栈,一个是辅助栈
2、每次入栈的时候,辅助栈如果是空的,或者本次入栈的数据不大于栈顶,直接入栈,比如2,1,1(数据栈)和2,1,1(辅助栈);否则压入的是当前栈顶的复制值,比如2,3,4(数据栈)和2,2,2(辅助栈),从而保证数据栈里面的最小值永远在辅助栈的栈顶
3、需要注意的是,实例化栈的时候,一定要传入一个泛型参数(本题中的栈存储的只能是int类型的值),否则比较大小的时候会出错(node <= min.peek())
4、访问栈顶元素用peek方法,而不是top方法

推荐阅读更多精彩内容

  • 题目:定义栈的数据结构,请在该类型中实现一个能够找得到栈的最小元素的min函数。在该栈中,调用min,push以及...
    Felicia1993阅读 384评论 0 0
  • 问题:定义栈的数据结构,请在该类型中实现min()接口 解法:除了正常的数据栈之外,开辟一个辅助栈。数据栈入栈时,...
    qmss阅读 114评论 0 0
  • Java byte code 的学习意义 为啥要学java bytecode,这就跟你问我已经会python了为...
    shanggl阅读 1,378评论 0 3
  • 总结 想清楚再编码 分析方法:举例子、画图 第1节:画图分析方法 对于二叉树、二维数组、链表等问题,都可以采用画图...
    M_巴拉巴拉阅读 1,074评论 0 7
  • 一、栈 1.1 栈的实现 栈(Stack)是限制仅在表的一端进行插入和删除运算的线性表。java没有栈这样的数据结...
    yjaal阅读 1,032评论 0 1
  • 我在月亮的弯处等你,你一定要来, 我在水流的湍急处等你,你一定要来, 我在星子的流光处等你,你一定要来, 我在蚂蚁...
    花满栅拦阅读 119评论 0 0
  • 一、gcc、automake 二、libxml2 三、OpenSSL 四、curl 五、图像处理库 六、Mcryp...
    liamu阅读 69评论 0 0
  • 一、全局安装composer 1、下载composer.phar(地址:https://getcomposer...
    Mlethe阅读 706评论 0 0
  • JavaScript的事件是以一种流的形式存在的,一个事件会有多个元素同时响应。具体分为:捕获型事件、冒泡型事件(...
    MrZengB阅读 160评论 0 1
  • 1. 外在环境干扰 生活中,无处不存在选择,姑且把这种选择就定义为生活中的决策。选择何种积分卡,点怎样的菜,都...
    会飞的灰阅读 100评论 0 0