noaman_wgs

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

【题目】定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。要求时间复杂度是O(1)。push pop min

【思路】设计一个辅助栈,当新加入的原数据栈中的数小于辅助栈顶的数时就加入该数,大于就继续加入辅助栈顶的数。这样想取出最小数就直接取出辅助栈栈顶的数就可以。

     

 1 package com.exe4.offer;
 2 
 3 import java.util.Stack;
 4 
 5 /**
 6  * 18【题目】定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。要求时间复杂度是O(1)。
 7  * @author WGS
 8  *
 9  */
10 public class MinInStack {
11     
12     Stack<Integer> dataStack=new Stack<Integer>();//数据栈
13     Stack<Integer> assisstStack=new Stack<Integer>();//辅助栈
14     
15     //压入操作 保证最小的数放在栈顶,所以原数据栈压入一个数时,辅助栈要比较该数与上个数的大小,》则仍压入上个数
16                                                            //小,则压入该数
17     public void push(int node){
18         dataStack.push(node);
19         if(assisstStack.size()==0 || node<assisstStack.peek()){//新压入的数node小,就压入node
20             assisstStack.push(node);
21         }else{
22             assisstStack.push(assisstStack.peek());//否则压入assisstStack中最小的数
23         }
24     }
25     
26     public void pop(){
27         if(dataStack.size()>0 && assisstStack.size()>0){
28             dataStack.pop();
29             assisstStack.pop();
30         }
31     }
32     //元数据栈顶值
33     public int top(){
34         if(dataStack.size()>0){
35             return dataStack.peek();
36         }
37         return -1;
38     }
39     //辅助栈中最小值
40     public int min(){
41         if(dataStack.size()>0 && assisstStack.size()>0){
42             return assisstStack.peek();
43         }
44         return -1;
45         
46     }
47     public static void main(String[] args) {
48         MinInStack minStack=new MinInStack();
49         minStack.push(1);
50         //minStack.pop();
51         minStack.push(4);
52         minStack.push(2);
53         minStack.push(11);
54         
55         System.out.println(minStack.min());//1   辅助栈中最小值
56         System.out.println(minStack.top());//11 元数据栈中栈顶值
57 
58     }
59 
60 }

 

posted on 2016-04-27 22:40  noaman_wgs  阅读(177)  评论(0编辑  收藏  举报