这个题其实很简单。最简单和最容易想的当然就是暴力了啊。也就是我的思路。
import java.util.Stack;
public class Solution {
Stack<Integer> stacks = new Stack<>();
public void push(int node) {
stacks.push(node);
}
public void pop() {
stacks.pop();
}
public int top() {
int top = stacks.pop();
stacks.push(top);
return top;
}
public int min() {
int min = stacks.pop();
stacks.push(min);
for(int stack : stacks){
if(stack < min){
min = stack;
}
}
return min;
}
}
然而有一种比较巧妙的做法。就是加一个最小栈,在min()操作比较频繁的情况下。充分增加效率。
import java.util.Stack;
public class Solution {
Stack<Integer> stacks = new Stack<>();
Stack<Integer> minStack = new Stack<>();
public void push(int node) {
stacks.push(node);
if(minStack.empty() || node <= minStack.peek()){
minStack.push(node);
}
}
public void pop() {
if(stacks.peek() == minStack.peek()){
minStack.pop();
}
stacks.pop();
}
public int top() {
return stacks.peek();
}
public int min() {
return minStack.peek();
}
}