题目:定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的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
待理解更深的时候前来更新。