public interface IMinMaxStack<T> { public T pop(); public void push(T t); public T getMin(); public T getMax(); public int getLength(); }
public class MinMaxStack implements IMinMaxStack<Integer> { private static int maxLength = 5; private static int [] data= new int[maxLength]; private static int [] mins= new int[maxLength]; private static int [] maxs= new int[maxLength]; private static int size = 0; private static int current = 0; private static int total = 0; private void growing(){ if (current >= maxLength / 4 * 3 ) { maxLength = (maxLength *3)/2 + 1; data = Arrays.copyOf(data, maxLength); mins = Arrays.copyOf(mins, maxLength); maxs = Arrays.copyOf(maxs, maxLength); } } @Override public Integer pop() { total --; if (current >= 0) { int temp = data[current-1] ; current --; return temp; } return null; } @Override public void push(Integer t) { total ++; growing(); data[current] = t; if(current == 0){ mins[current] = t; maxs[current] = t; }else{ if (mins[current-1] >= t) { mins[current] = t; }else{ mins[current] = mins[current-1]; } if (maxs[current-1] <= t) { maxs[current] = t; }else{ maxs[current] = maxs[current-1]; } } current ++; } @Override public Integer getMin() { int temp = mins[current]; return temp; } @Override public Integer getMax() { int temp = maxs[current]; return temp; } @Override public int getLength() { return total; } public static void main(String[] args) { MinMaxStack ms = new MinMaxStack(); ms.push(6); ms.push(2); ms.push(7); ms.push(1); ms.push(5); ms.push(3); System.out.println("current\tlength\tpop\tmin\tmax"); System.out.println(ms.current+"\t"+ms.getLength()+"\t"+ms.pop()+"\t"+ ms.getMin()+"\t"+ ms.getMax()); System.out.println(ms.current+"\t"+ms.getLength()+"\t"+ms.pop()+"\t"+ ms.getMin()+"\t"+ ms.getMax()); System.out.println(ms.current+"\t"+ms.getLength()+"\t"+ms.pop()+"\t"+ ms.getMin()+"\t"+ ms.getMax()); System.out.println(ms.current+"\t"+ms.getLength()+"\t"+ms.pop()+"\t"+ ms.getMin()+"\t"+ ms.getMax()); System.out.println(ms.current+"\t"+ms.getLength()+"\t"+ms.pop()+"\t"+ ms.getMin()+"\t"+ ms.getMax()); System.out.println(ms.current+"\t"+ms.getLength()+"\t"+ms.pop()+"\t"+ ms.getMin()+"\t"+ ms.getMax()); } }
捐助开发者
在兴趣的驱动下,写一个免费
的东西,有欣喜,也还有汗水,希望你喜欢我的作品,同时也能支持一下。 当然,有钱捧个钱场(支持支付宝和微信 以及扣扣群),没钱捧个人场,谢谢各位。
个人主页:http://knight-black-bob.iteye.com/
谢谢您的赞助,我会做的更好!
相关推荐
- **最小栈**:维护一个栈,同时能够返回栈内最小元素,常使用两个栈实现。 7. **树结构**: - **二叉搜索树**:左子节点的值小于父节点,右子节点的值大于父节点,便于查找、插入和删除操作。 - **AVL树**:自...
以下是使用Java实现这个最小栈的代码示例: ```java public class MinStack { private Stack<Integer> mainStack; private Stack<Integer> minStack; public MinStack() { mainStack = new Stack(); minStack...
最后,JackyTao博客小栈整理.url指向的可能是某位专家的博客集合,其中可能包含更深入的技术讨论和实战案例,对于深化理解和扩展知识面非常有帮助。 总之,这份Java面试宝典覆盖了从基础到进阶的Java知识,结合实际...
5. **面试准备**:Java1可能也包含了常见的面试问题和解答,帮助求职者熟悉常见的技术面试题型,如“两数之和”、“最小栈”或“LRU缓存”。 6. **最佳实践**:学习如何遵循良好的编程习惯和设计模式,如SOLID原则...
第155题名为“最小栈”,是一道设计数据结构的问题,它要求我们实现一个栈,除了基本的栈操作(push和pop)之外,还要能提供一个getMin操作,能够在常数时间内获取栈中的最小元素。下面我们将详细探讨这个问题以及它...
"Stack_Queue"可能是包含Java代码的文件,可能包括了栈和队列的基本操作的示例代码,比如使用数组或链表实现,以及针对Google面试中可能出现的题目,如最小栈、环形队列等的解决方案。这些代码实例可以帮助学习者...
在Java开发领域,汽车租赁系统是一个典型的业务管理系统,它涵盖了用户管理、车辆管理、租赁管理、支付结算等多个功能模块。这个项目旨在为汽车租赁企业提供一套高效、便捷的运营平台,帮助他们更好地管理车辆资源,...
\j2ee精品\java 学生管理系统 \j2ee精品\java 学生管理系统 \j2ee精品\java 学生管理系统 \j2ee精品\java 学生管理系统 \j2ee精品\java 学生管理系统 \j2ee精品\java 学生管理系统 \j2ee精品\java 学生管理系统
每次入栈时,如果新元素小于或等于最小栈的栈顶元素,则同时压入最小栈;`min()`操作直接返回最小栈的栈顶元素。 6. **判断push和pop序列是否一致**: 给定一个push序列和一个pop序列,判断是否能通过合法的push和...
java版五子棋源码 一、LeetCode刷题笔记 参考网站: https://leetcode-cn.com/problemset/all/ leetcode ...编程语言: Java 开始时间: 2020/10/19 ...最小栈 S #160 相交链表 S #167 两数之和II - 输入有序数组 S #1
该工具提供了在linux环境的一键部署功能,可以大幅度减少开发人员的工作,不过压缩包里面只提供了jdk1.8,如果需要安装其他版本,则将所需版本下载后放到该压缩包中,则可以...代码小栈,免费获取更多工具包和学习视频
Hash相关 q1_两数之和 q387_字符串中的第一个唯一字符 链表操作 q2_两数相加 q19_删除链表的倒数第N个节点 q25_k个一组翻转链表 q61_旋转链表 q138_复制带随机指针的链表 ...q155_最小栈 q224_基本计算
书中的题目涵盖了许多经典算法,例如,回溯法求解全排列、最小栈的设计、二叉搜索树的构造等。这些问题的Java实现要求开发者不仅要有扎实的编程基础,还需要具备良好的逻辑思维和问题分析能力。 在Java实现《剑指...
- 最小栈(Min Stack)要求设计一个栈,在该栈中寻找最小值的时间复杂度为O(1)。 - 逆波兰表达式求值(Evaluate Reverse Polish Notation)则是关于后缀表达式的计算。 **动态规划(Dynamic Programming)** 动态...
Leetcode扑克 LeetCodeJava ...最小栈 Day23 复制带随机指针的链表 Day24 将二叉搜索树转化为排序的双向链表 Day25 二叉树的序列化与反序列化 Day26 数据流的中位数 Day27 最大子序和 Day28 数字 1 的
Java Swing是一种用于构建Java桌面应用程序的图形用户界面(GUI)工具包,而Jigloo则是一个强大的辅助开发工具,尤其适用于需要使用Swing进行GUI设计的开发者。Jigloo是作为MyEclipse集成开发环境(IDE)的一个插件...
例如,如果应用程序中存在大量的递归调用或需要启动大量线程,可以适当减小栈的大小,以减少内存的消耗。 ### 2. JVM内存模型详解 JVM内存模型主要包括以下几个部分: - **程序计数器**:每个线程拥有一个独立的...
《五子棋游戏的Java实现详解》 在编程领域,实现一个简单的五子棋游戏是初学者提升技能、理解游戏逻辑与程序设计相结合的良好实践。本篇将详细讲解如何使用Java语言来构建一个五子棋游戏,涵盖核心知识点,包括棋盘...
最小栈 Min Stack Easy 394 字符串编码 Decode String Medium 链表 No Problem Solution Difficulty Tag 2 两数相加 Add Two Numbers Medium 19 删除链表倒数第N个节点 Remove Nth Node From End of List Medium 21 ...
包含min的最小栈题目描述定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的 min 函数。public void push(int num) {pub