博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
实现带有getMin的栈
阅读量:4521 次
发布时间:2019-06-08

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

题目

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

要求

  1. pop、push、getMin的时间复杂度是O(1)
  2. 可以使用现成的栈类型

思路

如下图所示,在栈结构中,每次pop的过程中,产生的最小值,分别为:1、2、6,在pop过程会出现两个规律:

  1. 每次pop的元素不是最小值时,整个栈的最小值保持不变,
  2. 越上的最小值越小

那么只需要引入多一个栈(minElementStack),在push时,在minElementStack的栈顶里面保存比当前最小值还小的元素就可以了,而minElementStack的栈顶始终保持当前栈中最小的元素。在pop时,当pop掉栈的最小值元素,只需同时pop掉minElementStack中的元素就好了。

栈结构

代码

package com.github.zhanyongzhi.interview.algorithm.stacklist;    import java.util.Stack;    /**     * 带有getMin的栈     * @author zhanyongzhi     */    public class GetMinStack
> { Stack
stack; Stack
minElementStack; public GetMinStack(){ stack = new Stack
(); minElementStack = new Stack
(); } public void push(T item) { stack.push(item); if(minElementStack.empty()) { minElementStack.push(item); return; } T topItem = getMin(); if(0 <= item.compareTo(topItem)) return; //当前加入的元素是最小的则加入到minElementStack中 minElementStack.push(item); } public T pop(){ T item = stack.pop(); T topItem = getMin(); //如果当前弹出的是最小的元素 if(topItem.equals(item)) minElementStack.pop(); return item; } public T getMin(){ return minElementStack.peek(); } }

转载于:https://www.cnblogs.com/xiaohunshi/p/5680786.html

你可能感兴趣的文章
Lintcode: Fast Power
查看>>
Pocket Gem OA: Log Parser
查看>>
枚举也能直接转换为对应的数值输出
查看>>
angularjs1-7,供应商
查看>>
BitSet
查看>>
Spring常用注解,自动扫描装配Bean
查看>>
(转载)深入理解WeakHashmap
查看>>
JAVA中的数组
查看>>
爬虫—使用Requests
查看>>
scrollIntoView()窗口滚动
查看>>
No toolchains found in the NDK toolchains folder for ABI with prefix: mips64el-linux-android
查看>>
使用ansible远程管理集群
查看>>
读jQuery源码释疑笔记3
查看>>
手把手教你jmeter压测--适合入门
查看>>
Sequelize+MySQL存储emoji表情
查看>>
RabbitMQ学习之Publish/Subscribe(3)
查看>>
[SCOI2010]生成字符串
查看>>
JLOI2015 城池攻占
查看>>
在 Azure 虚拟机上快速搭建 MongoDB 集群
查看>>
跑步运动软件调研
查看>>