1、自定义栈获取栈元素最小值(getMin)
1.1 简单描述
自定义一个栈的元素,实现获得最小元素的方法:getMin
1.2 思路:
- 调用两个Java栈集合,一个数据栈dataStack,一个辅助栈helpStack
- 压栈操作:同时压入,data栈正常压入,help栈:
a:如果没有元素,就压入新元素
b:如果有元素,小于help栈顶元素,就压入新元素
c:如果大于或者等于help栈顶元素,就重复压入栈顶元素
(始终保持help栈顶元素是data栈里面的最小元素) - 弹栈操作:一起弹
- 获取最小值:获取help栈的栈顶元素
1.3 具体实现代码:
package cn.nupt.sort;
import java.util.Stack;
public class Stack_getMin {
/**
* @Description: 自定义栈,实现getMin,即找到栈中最小值的方法
*
* @author PizAn
* @date 2019年1月27日 上午11:45:48
*
*/
public static class MyStack {
// 注:如果你自定义的类的名字和你所引用的相同,那么会强制带上前缀
// 比如这里的类名如果也是Stack,下面就不能再引用java.util.Stack;需要加上前缀
// 1、建立两个栈(用Java自带的栈集合)一个是dataStack,一个是helpStack
private Stack<Integer> dataStack;
private Stack<Integer> helpStack;
public MyStack() {
this.dataStack = new Stack<Integer>();
this.helpStack = new Stack<Integer>();
}
// 压栈
public void push(Integer obj) {
// data栈直接压
dataStack.push(obj);
// help栈需要判断一下,如果栈里没有数,就把第一个数压入,如果data栈里面新来的数比help栈顶(即最小的数)小,就压入
// 如果大于或者等于,就重复压入相同的数
if (helpStack.isEmpty()) {
// 如果,help栈为空,直接将新数放进去
helpStack.push(obj);
} else if (obj >= helpStack.peek()) {
// help栈不为空,且新数大于等于help栈的栈顶元素,重复压入栈顶元素
helpStack.push(helpStack.peek());
} else {
// 新数小于栈顶元素,压入新数(始终保持help栈里面是data栈中最小的元素)
helpStack.push(obj