力扣简155 最小栈
手写栈
//自己本来想对栈只加一个int型的,记录他的最小值,而且还不会写栈,绝了!所以建了一个Java笔记,慢慢补充吧。
//看了题解知道不合理。当最小值弹出后求最小值又是谁?还得重新遍历。
//只看了题解的初始化!
package leetcode01; import java.util.Deque; import java.util.LinkedList; import java.util.Stack; /** * Your MinStack object will be instantiated and called as such: * MinStack obj = new MinStack(); * obj.push(val); * obj.pop(); * int param_3 = obj.top(); * int param_4 = obj.getMin(); */ //设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。 //实现 MinStack 类: // //MinStack() 初始化堆栈对象。 //void push(int val) 将元素val推入堆栈。 //void pop() 删除堆栈顶部的元素。 //int top() 获取堆栈顶部的元素。 //int getMin() 获取堆栈中的最小元素。 //自己本来想对栈只加一个int型的,记录他的最小值,而且还不会写栈,绝了! //看了题解知道不合理。当最小值弹出后求最小值又是谁?还得重新遍历。 //只看了题解的初始化! class MinStack{ Deque<Integer> MinStack; Deque<Integer> StackAssist; public MinStack() { MinStack = new LinkedList<Integer>(); StackAssist = new LinkedList<Integer>(); StackAssist.add(Integer.MAX_VALUE); } public void push(int val) { MinStack.push(val); if(val<StackAssist.getFirst()) { StackAssist.push(val); } else { StackAssist.push(StackAssist.getFirst()); } } public void pop() { MinStack.pop(); StackAssist.pop(); } public int top() { return MinStack.getFirst(); //等于peekFirst 等于peek } public int getMin() { return StackAssist.getFirst(); } } public class Solution155 { public static void main(String[] args) { // TODO Auto-generated method stub MinStack sta=new MinStack(); sta.push(3); System.out.println(sta.top()); System.out.println(sta.getMin()); sta.push(4); System.out.println(sta.top()); System.out.println(sta.getMin()); sta.push(2); System.out.println(sta.top()); System.out.println(sta.getMin()); sta.pop(); System.out.println(sta.top()); System.out.println(sta.getMin()); } }