博客
关于我
包含min函数的栈
阅读量:650 次
发布时间:2019-03-15

本文共 1240 字,大约阅读时间需要 4 分钟。

定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。

核心思路

为了实现一个能够返回栈中最小元素的O(1)时间复杂度的min函数,可以采用双栈的方法。主要思路如下:

  • 双栈结构:设定两个栈,主栈(stackA)用于存储元素,辅助栈(stackMin)用于存储当前栈中最小的元素。
  • push操作:当向主栈push元素时,将元素与辅助栈顶部元素比较,较小者入辅助栈。
  • pop操作:同步弹出主栈和辅助栈的元素,保持两栈的栈顶元素一致。
  • 时间复杂度:每个操作均为O(1),满足题目要求。
  • 代码实现

    import java.util.Stack;public class Solution {    private Stack stackA = new Stack<>();    private Stack stackMin = new Stack<>();    public void push(Object obj) {        if (stackMin.isEmpty()) {            stackMin.push(obj);        } else {            Object currentMin = stackMin.peek();            if (((Comparable) obj).compareTo(currentMin) < 0) {                stackMin.push(obj);            } else {                stackMin.push(currentMin);            }        }        stackA.push(obj);    }    public void pop() {        if (!stackA.isEmpty() && !stackMin.isEmpty()) {            stackA.pop();            stackMin.pop();        }    }    public Object top() {        return stackA.peek();    }    public Object min() {        return stackMin.peek();    }}

    功能解释

    • push(Object obj):将元素obj加入主栈stackA,并根据 compareTo方法比较stackMin顶部元素,较小者保留在stackMin顶部。
    • pop():同时从主栈和辅助栈弹出一个元素,确保两栈同步。
    • top():返回主栈顶部元素。
    • min():返回辅助栈顶部,即当前栈中最小的元素。

    这种方法有效地保证了min函数的时间复杂度为O(1),同时维护了最小值,确保正确性。

    转载地址:http://hepmz.baihongyu.com/

    你可能感兴趣的文章
    idea创建工程时错误提醒的是architectCatalog=internal
    查看>>
    SpringBoot找不到@EnableRety注解
    查看>>
    简易计算器案例
    查看>>
    在Vue中使用样式——使用内联样式
    查看>>
    Find Familiar Service Features in Lightning Experience
    查看>>
    Explore Optimization
    查看>>
    连接Oracle数据库经常报错?关于listener.ora和tnsnames.ora文件的配置
    查看>>
    解决数据库报ORA-02289:序列不存在错误
    查看>>
    map[]和map.at()取值之间的区别
    查看>>
    【SQLI-Lab】靶场搭建
    查看>>
    【Bootstrap5】精细学习记录
    查看>>
    Struts2-从值栈获取list集合数据(三种方式)
    查看>>
    参考图像
    查看>>
    *.json: [“usingComponents“][“van-button“] 未找到
    查看>>
    设计模式(18)——中介者模式
    查看>>
    error LNK2019:无法解析的外部符号_imp_CryptAcquireContextA@20
    查看>>
    推荐几篇近期必看的视觉综述,含GAN、Transformer、人脸超分辨、遥感等
    查看>>
    【专题3:电子工程师 之 上位机】 之 【46.QT音频接口】
    查看>>
    一文理解设计模式--命令模式(Command)
    查看>>
    VTK:可视化之RandomProbe
    查看>>