包含min函数的栈---重写栈实现特定的功能
来源:互联网 发布:xampp linux 编辑:程序博客网 时间:2024/06/07 01:04
重写一下栈的结构,要求具备入栈、出栈、求最小元素,复杂度都是o(1),
解题思路是用一个辅助栈存储每一次入栈时候的最小元素,出栈的时候,如果出栈的元素恰好是最小元素,则把辅助栈的栈顶元素删除。
需要注意的是,模板类型,不能指定成具体的类型,还有就是辅助找存放的是最小元素在数据栈中的位置,且辅助栈的元素数目时刻与数据栈中的元素的数目相等。
java代码
package stackAndQuence;import java.util.Stack;import org.omg.CORBA.PRIVATE_MEMBER;public class stactMin { public static class StackWithMin<T extends Comparable<T>> { private Stack<T> dataStack; private Stack<Integer> mindata; // 存储的是最小元素的位置 // 构造函数 public StackWithMin() { this.dataStack = new Stack<>(); this.mindata = new Stack<>(); } // 入栈 public void push(T t) { if (t == null) { System.out.print("error"); return; } if (dataStack.isEmpty()) { dataStack.push(t); mindata.push(0); } else { T tmp = dataStack.get(mindata.peek()); dataStack.push(t); if (t.compareTo(tmp) < 0) { mindata.push(dataStack.size() - 1); } else { mindata.push(mindata.peek()); } } } // 出栈,保证数据栈和最小元素位置栈保持大小相等 public T pop() { if (dataStack.isEmpty()) { return null; } else { mindata.pop(); return dataStack.pop(); } } // 取最小元素 public T min() { if (mindata.isEmpty()) { throw new RuntimeException("No element in stack."); } else { return dataStack.get(mindata.peek()); } } } public static void main(String[] args) { StackWithMin<Integer> stack = new StackWithMin<>(); stack.push(3); System.out.println(stack.min() == 3); stack.push(4); System.out.println(stack.min() == 3); stack.push(2); System.out.println(stack.min() == 2); stack.push(3); System.out.println(stack.min() == 2); stack.pop(); System.out.println(stack.min() == 2); stack.pop(); System.out.println(stack.min() == 3); stack.push(0); System.out.println(stack.min() == 0); }}
0 0
- 包含min函数的栈---重写栈实现特定的功能
- 实现包含min函数的栈
- 包含min函数的栈 java实现
- 包含min函数的栈JAVA实现
- 包含min函数的栈java实现
- 包含min函数的栈
- 包含min函数的栈
- 包含min函数的栈
- 包含min函数的栈
- 包含min函数的栈
- 包含min函数的栈
- 包含min函数的栈
- 包含min函数的栈
- 包含min函数的栈
- 包含min 函数的栈
- 包含min函数的栈
- 包含min函数的栈
- 包含min函数的栈
- 文字滚动
- [LeetCode]Remove Duplicates from Sorted List II Java
- 【每日一课】 Python 官方文档 4 --- 流程控制
- linux 入门笔记_实验楼_未完结... ...
- WEB站点性能优化实践(加载速度提升2s)
- 包含min函数的栈---重写栈实现特定的功能
- Java 项目采用JDBC连接数据库的常用方式
- H264的句法和语义(一)
- Java反射机制学习
- iOS -- NSURLSession网络请求,上传,下载
- Java NIO(New I/O)的三个属性position、limit、capacity
- 如何通过Docker-Compose一键部署SuperMap iCloudManager
- win10 更新会带来的问题
- java实现FTP上传下载:FTPClient类进行FTP上传下载大文件(包含导致假死现象)