设计一个有getMin功能的栈

要求:设计一个new class,实现push,pop,getMin,复杂度O(1)

思路:两个栈一起用,一个做正常栈使用(normalStack),一个用于存放最小值(minStack),minStack中随着normal中的压入一起,当它为空的时候压入第一个元素,不空的时候,只压入比栈顶元素小的。pop的时候也是,如果normal中pop的比min中栈顶元素大,min不操作,若相等,一起pop更新。实际就是压入的反向过程。最后,getMin的时候,直接返回min的栈顶即可。

总结:自己写的代码,缺少pop,getMin时,栈为空的判断及处理(直接throw new RuntimeException(".."))

          缺少一个类的构造?就是指明this.,以及后续功能函数中,都没有用this.来指代。

import java.util.*;
public class MyStack{
	private Stack<Integer> normalStack;
	private Stack<Integer> minStack;
	
	public MyStack() {
		this.normalStack = new Stack<Integer>();
		this.minStack = new Stack<Integer>();
	}
	public void push(int num) {
		this.normalStack.push(num);
		if(this.minStack.isEmpty()) {
			this.minStack.push(num);
		}else {
			if(num<this.minStack.peek()) {
				this.minStack.push(num);
			}
		}
		
	}
	
	public int pop() {
		if(this.normalStack.isEmpty()) {
			throw new RuntimeException("Empty");
		}
		if(this.minStack.peek()==this.normalStack.peek()) {
			this.minStack.pop();
		}		
		return this.normalStack.pop();
	}
	
	public int getMin() {
		if(this.minStack.isEmpty()) {
			throw new RuntimeException("Empty");
		}
		return this.minStack.peek();
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值