JAVA之设计一个包含基本push()、pop(),又可以返回栈中最小元素的栈
提示:
1. 可以使用栈的push()、pop()、getMin()方法;
2. 栈的peek()方法,可以返回栈顶的元素但不移除它
这种类型的题目,往往是面试的入门题目,往往考察面试者的编码能力;
如何设计这个 “特殊的栈” ,需要用两个普通的栈来实现,一个栈(取名为stackData)用来存放push进来的元素,一个栈(取名为stackDataMin)用来存放最小的元素。
构造 “特殊的栈” 时,创建两个栈对象,用来存储栈元素以及最小栈元素
public Stack<Integer> stackData;
public Stack<Integer> stackDataMin;
//两个内置构造栈
public StackTest(){
this.stackData = new Stack<>();
this.stackDataMin = new Stack<>();
}
push()方法进行判断大小 如果最小则保存到stackDataMin中
//push
public void push(int value){
if (this.stackData.isEmpty()){
this.stackDataMin.push(value);
}else if(value < this.getMin()) {
this.stackDataMin.pop();
this.stackDataMin.push(value);
}
this.stackData.push(value);
}
package Stack;
import java.util.Stack;
/**
* @Auther: 韩shuo
* @Data: 2023/2/21 0021 13:30
* @Description:
*/
public class StackTest {
public Stack<Integer> stackData;
public Stack<Integer> stackDataMin;
//两个内置构造栈
public StackTest(){
this.stackData = new Stack<>();
this.stackDataMin = new Stack<>();
}
//push
public void push(int value){
if (this.stackData.isEmpty()){
this.stackDataMin.push(value);
}else if(value < this.getMin()) {
this.stackDataMin.pop();
this.stackDataMin.push(value);
}
this.stackData.push(value);
}
//pop
public int pop(){
if(this.stackData.isEmpty()){
throw new RuntimeException("栈为空");
}
return this.stackData.pop();
}
//getMin
public int getMin(){
if(this.stackData.isEmpty()){
throw new RuntimeException("栈为空");
}
Integer peek = this.stackDataMin.peek();
return peek;
}
public static void main(String[] args) {
StackTest stackTest = new StackTest();
stackTest.push(1);
stackTest.push(3);
stackTest.push(-9);
stackTest.push(2);
stackTest.push(8);
stackTest.push(9);
System.out.println("初始:"+stackTest.stackData);
int min = stackTest.getMin();
System.out.println("min:"+min);
stackTest.pop();
System.out.println("完成:"+stackTest.stackData);
}
}