找到栈最小元素

31 篇文章 0 订阅
23 篇文章 0 订阅

题意描述:定义栈的数据结构,请在该类型中实现一个能够找到栈最小元素的min函数。在该栈调用min、push、pop的时间复杂度都是O(1)

解题思路:引用数据栈和辅助栈解题,

入栈:数据栈中直接压入元素,当辅助栈空或者要压入的元素小于当前辅助栈栈顶元素时,辅助栈也压入该元素

出栈:在数据栈不空的前提下,如果辅助栈栈顶元素与数据栈栈顶元素相等,则都弹出;否则只弹出数据栈栈顶元素

得最小元素:直接返回辅助栈栈顶元素

图解过程如下:


import java.util.Scanner;
import java.util.Stack;

public class MinStack {

	private Stack<Integer> dataStack = new Stack<>();
	private Stack<Integer> minStack = new Stack<>();
	
	public MinStack() {}
    
    public void push(int x) {
        dataStack.push(x);
        //如果minStack()为空或者新元素比mniStack()当前栈顶元素小,则新元素进栈
        if(minStack.empty() || ((!minStack.empty())&&x<=minStack.peek()))
        	minStack.push(x);
    }
    
    public void pop() {
        if(!dataStack.empty()){
        	if(minStack.peek().equals(dataStack.peek()))
        		minStack.pop();
        	dataStack.pop();
        }
    }
    
    public int top() {
        return dataStack.peek();
    }
    
    public int getMin() {
    	//辅助栈栈顶存放的是栈中最小元素
        return minStack.peek();
    }
	
	public static void main(String[] args) {
		MinStack ms = new MinStack();
		ms.push(-2);
		ms.push(0);
		ms.push(-3);
		System.out.println(ms.getMin());
		
		ms.pop();
		System.out.println(ms.top());
		System.out.println(ms.getMin());
	}

}









  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值