10081_AA

导航

剑指offer——包含min函数的栈

题目:定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度为O(1))

该题是自己第一次采用编程的方式来实现Java中栈的功能,故直接借鉴了大牛的代码

 1 import java.util.Stack;
 2 import java.util.Arrays;
 3 
 4 public class Solution {
 5 //借用辅助栈存储min的大小,定义了栈结构
 6     private int size;
 7     private int min = Integer.MAX_VALUE;
 8     private Stack<Integer> minStack = new Stack<Integer>();
 9     private Integer[] elements = new Integer[10];
10     public void push(int node) {
11         ensureCapacity(size+1);
12         elements[size++] = node;
13         if(node<=min){
14             minStack.push(node);
15             min = minStack.peek();
16         }else{
17             minStack.push(min);
18         }
19     }
20     private void ensureCapacity(int size){
21         int len = elements.length;
22         if(size>len){
23             int newLen = (len*3)/2+1;//每次扩容方式
24             elements = Arrays.copyOf(elements, newLen);
25         }
26     }
27     public void pop() {
28         Integer top = top();
29         if(top != null){
30             elements[size-1] = (Integer) null;
31         }
32         size--;
33         minStack.pop();
34         min = minStack.peek();
35     }
36     public int top() {
37         if(!empty()){
38             if(size-1>=0)
39                 return elements[size-1];
40         }
41         return (Integer) null;
42     }
43     public boolean empty(){
44         return size == 0;
45     }
46     public int min() {
47         return min;
48     }
49 }

其中peek()函数是查看栈顶元素而不移除它。其实看完后仍旧有一点小迷茫。

如果想理解可以参看

https://www.cnblogs.com/jose1125/p/5294972.html

待理解更深的时候前来更新。

posted on 2019-04-18 20:50  10081_AA  阅读(71)  评论(0编辑  收藏  举报