JAVA之设计一个包含基本push()、pop(),getMIn()方法的栈

文章介绍了一种使用两个栈实现的特殊数据结构,其中一个栈用于存储所有push进来的元素,另一个栈用于存储当前的最小元素。在push操作时,如果新元素小于最小值,则更新最小栈。getMin()方法可以直接返回最小值,而无需遍历整个栈。
摘要由CSDN通过智能技术生成

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);
    }
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

... -..- -.--

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值