剑指offer18--旋转的方式打印矩阵
2016-05-28 16:57
399 查看
题目: 定义栈的数据结构,请在该类型中实现一个能够得到栈的最小素的min 函数。在该栈中,调用min、push 及pop的时间复杂度都是0(1)
我那解题思路一开始就是错的,这个题目的思路就是要自己重新定义一个栈,而我是利用栈来进行操作,好失败。下面还是大神的代码,不能这样,一定要多花时间自己编出来才可以。
package 剑指offer; import java.util.*; public class Test21 { public static void main(String args[]){ StackIncludeMin<Integer> stack = new StackIncludeMin<>(); 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); } public static class StackIncludeMin<T extends Comparable<T>>{ // 注意在minstack中存的是最小元素的位置 private Stack<T> dataStack; private Stack<Integer> minStack; public StackIncludeMin(){ this.dataStack = new Stack<>(); this.minStack = new Stack<>(); } public T pop(){ if(dataStack.isEmpty()){ throw new RuntimeException("Stack is Empty"); } minStack.pop(); return dataStack.pop(); } public void push(T t) { if (t == null) { throw new RuntimeException("Element can be null"); } if (dataStack.isEmpty()) { dataStack.push(t); minStack.push(0); } else { // 获取数据栈中的最小元素(未插入t之前的) T e = dataStack.get(minStack.peek()); // 将t入栈 dataStack.push(t); // 如果插入的数据比栈中的最小元素小 if (t.compareTo(e) < 0) { // 将新的最小元素的位置入最小栈 minStack.push(dataStack.size() - 1); } else { // 插入的元素不比原来的最小元素小,复制最小栈栈顶元素,将其入栈 minStack.push(minStack.peek()); } } } public T min() { // 如果最小数公位置栈已经为空(数据栈中已经没有数据了),则抛出异常 if (minStack.isEmpty()) { throw new RuntimeException("No element in stack."); } // 获取数据栈中的最小元素,并且返回结果 return dataStack.get(minStack.peek()); } } }
好好应对,不能应付,不能浮躁
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树