class MinStack { //通过数组模拟栈 ArrayList<Integer> ls; //记录一段事件的最小值 int min; // 指针指着最后一个位置 int flag; // 通过贪心思想策略保存相对区域中的最小值 也就是最小栈 ArrayList<Integer> mins; /** initialize your data structure here. */ public MinStack() { ls = new ArrayList<Integer>(); mins = new ArrayList<Integer>(); //初始化是最大值 min = Integer.MAX_VALUE; ls.add(0); mins.add(Integer.MAX_VALUE); flag = 0; } public void push(int x) { flag++; if (x < min) min = x; mins.add(min); ls.add(x); } public void pop() { ls.remove(flag); mins.remove(flag); // 可能最小值被移出来了 min需要变成 第二个最小值 flag--; min = mins.get(flag); } public int top() { return ls.get(flag); } public int getMin() { return mins.get(flag); } }