设计一个有getMin功能的栈

【题目】

实现一个特殊的栈,在实现栈的基本功能的基础上,再实现返回栈中最小元素的操作。

【要求】

  1. pop、push、getMin操作的时间复杂度都是O(1)。
  2. 设计的栈类型可以使用现成的栈结构。
package leif.algorithm_and_data_structure.stack_and_queue;

import java.util.Stack;

public class MyStack1 {
    private Stack<Integer> stackData = new Stack<Integer>();
    private Stack<Integer> stackMin = new Stack<Integer>();

    public void push(int newNum) {
        stackData.push(newNum);

        if (stackMin.isEmpty() || newNum <= stackMin.peek()) {
            stackMin.push(newNum);
        }
    }

    public int pop() {
        if (stackMin.isEmpty()) {
            throw new RuntimeException("Your stack is empty.");
        }

        int value = stackData.pop();

        if (value == stackMin.peek()) {
            return stackMin.pop();
        }

        return value;
    }

    public int getMin() {
        if (stackMin.isEmpty()) {
            throw new RuntimeException("Your stack is empty.");
        }

        return stackMin.peek();
    }
}
package leif.algorithm_and_data_structure.stack_and_queue;

import java.util.Stack;

public class MyStack2 {
    private Stack<Integer> stackData = new Stack<Integer>();
    private Stack<Integer> stackMin = new Stack<Integer>();

    public void push(int newNum) {
        stackData.push(newNum);

        if (stackMin.isEmpty() || newNum <= stackMin.peek()) {
            stackMin.push(newNum);
        } else {
            stackMin.push(stackMin.peek());
        }
    }

    public int pop() {
        if (stackMin.isEmpty()) {
            throw new RuntimeException("Your stack is empty.");
        }

        stackMin.pop();
        return stackData.pop();
    }

    public int getMin() {
        if (stackMin.isEmpty()) {
            throw new RuntimeException("Your stack is empty.");
        }

        return stackMin.peek();
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 栈 栈的英文单词是Stack,它代表一种特殊的线性表,这种线性表只能在固定一端(通常认为是线性表的尾端)进行插入,...
    Jack921阅读 1,638评论 0 5
  • 题目一:设计一个带有getMin功能的栈 [leetcode155]https://leetcode.com/pr...
    futurehau阅读 564评论 0 0
  • 栈(stack)是限定仅在表尾进行插入和删除操作的线性表。队列(queue)是一种先进先出(First In Fi...
    innovatorCL阅读 795评论 0 0
  • 目录 1、引言2、栈3、队列 引言 栈和队列都是动态集合,可以理解为线性表或线性表实现的数据结构。它可以由数组实现...
    某昆阅读 964评论 0 3
  • 我就像一个从没吃过糖的小孩子,第一次尝到了那甜,只想牢牢地霸占着,再也不肯松手。 1 认识方硕是在一个很有名的论坛...
    有故事的牛魔王阅读 492评论 0 1

友情链接更多精彩内容