博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LeetCode之Min Stack 实现最小栈
阅读量:6893 次
发布时间:2019-06-27

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

题目描述:

Design a stack that supports push, pop, top, and retrieving the minimum element in constant time.

push(x) -- Push element x onto stack.

pop() -- Removes the element on top of the stack.

top() -- Get the top element.

getMin() -- Retrieve the minimum element in the stack.

设计一个最小栈,支持入栈,出栈,获取栈顶元素,获取栈最小值,要求时间复杂度0(1).

 

Stack(栈)是First in-Last out的数据结构。如果不考虑时间复杂度,实现题目的要求都比较简单,现在限定了不超过常量时间O(1),

就不能用简单的排序过滤实现了。

另外,栈顶(top)指的是允许操作数据的一端,要与堆栈中高低地址不同的栈顶和栈底区别开来,以前我经常搞混。

public class MinStack {        //声明数据栈    private Stack
elementsStack=new Stack
(); //声明辅助栈 private Stack
supportStack=new Stack
(); /** * 考虑到时间复杂度的需求,添加一个辅助栈, * 每次入栈时将元素分别存入数据栈和辅助栈, * 辅助栈中的数据始终保持最小值在栈顶,需要获取最小值时,直接Peek()辅助栈即可。 */ public static void main(String[] args){ MinStack minStack=new MinStack(); //以下测试用例 minStack.push(0); minStack.push(1); minStack.push(0); System.out.print(minStack.getMin()); minStack.pop(); System.out.print(minStack.getMin()); } public void push(int x) { //始终保持辅助栈顶是最小元素 if(supportStack.empty() || x <= supportStack.peek()){ supportStack.push(x); } elementsStack.push(x); } public void pop() { //更新辅助栈 if(elementsStack.peek().equals(supportStack.peek())){ supportStack.pop(); } elementsStack.pop(); } public int top() { return elementsStack.peek(); } public int getMin() { //辅助栈 return supportStack.peek(); }}

 提交,可以AC.

本文转自邴越博客园博客,原文链接:http://www.cnblogs.com/binyue/p/4111369.html,如需转载请自行联系原作者

你可能感兴趣的文章
数据结构学习笔记(二)
查看>>
我的c++最佳实践
查看>>
Android沉浸式(侵入式)标题栏(状态栏)Status(一)
查看>>
机器学习实战-K-nearest neighbors 算法的优缺点
查看>>
Nodejs内存控制详解(上篇)
查看>>
干货丨Power Query 数据类型及数据结构
查看>>
JS的防抖与节流
查看>>
朋也社区 v5.2.0 更新,新增手机号,微信登录外加主题一套
查看>>
使用Identity Server 4建立Authorization Server (2)
查看>>
剥开比原看代码15:比原是如何转帐的
查看>>
面试官: 你为什么使用前端框架?
查看>>
Qunar 高速发展下数据库的创新与发展
查看>>
巧妙的CSS
查看>>
归并排序就这么简单
查看>>
闭锁——CountDownLatch
查看>>
注解就这么简单
查看>>
JS函数无响应
查看>>
*(int*)&p
查看>>
LinkedList 源码分析(JDK 1.8)
查看>>
QT5.10.0安装教程图文教程以及安装成功QT5.10.0后环境配置图文教程
查看>>