【Java面试题】栈中所含最小元素的min函数

【题目】:

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

【示例】:
输入

45237

  • peek() 查看栈顶的对象而不移除它
  • push() 入栈
  • pop() 出栈

用一个min栈同步存储stack栈最小数,比较;保证时间复杂度。
入栈:
在这里插入图片描述
出栈:
在这里插入图片描述
【关键点】: 栈,O(1)
【Java】:

import java.util.Stack;

public class Solution {

    Stack<Integer> stack = new Stack<Integer>();
    Stack<Integer> min = new Stack<Integer>();
    //入栈
    public void push(int node) {
        if(min.isEmpty()||node<min.peek()){//node比min栈数小存入(min总比stack小)
            min.push(node);
        }
        stack.push(node);//没有限制,全部存入
    }
    //出栈
    public void pop() {
        if(min.peek().equals(stack.peek())){//当stack较小值弹出时,min也弹出;清空
            min.pop();
        }
        stack.pop();//弹出
    }
    
    public int top() {
        return stack.peek();//peek()查看栈顶的对象而不移除它
    }
    
    public int min() {
        return min.peek();//peek()查看最小min栈顶的对象而不移除它
    }
}

发布了195 篇原创文章 · 获赞 335 · 访问量 12万+

猜你喜欢

转载自blog.csdn.net/cungudafa/article/details/101361379
今日推荐