这里就体现出刷题的好处了,刷的多了就会遇到重复的题目。
思路有了之后便是逻辑编码 再就可以迎刃而解了。
本题收录在 《程序员代码面试指南》的第一题。
我是用的是 两个栈,[一个只存最小值(值唯一),一个存原值] 的省空间方法。
还有[维护高度相同的两个栈,一个存原值,一个存最小值] 的省时间方法。
public class Solution {
Stack<Integer> stack = new Stack<>();
Stack<Integer> mainStack = new Stack<>();
public void push(int node) {
stack.push(node);
if(mainStack.isEmpty()){
mainStack.push(node);
} else if(node <= mainStack.peek()){
mainStack.push(node);
}
}
public void pop() {
int popNode=stack.pop();
if(popNode == mainStack.peek()){
mainStack.pop();
}
}
public int top() {
return stack.peek();
}
public int min() {
return mainStack.peek();
}
}栈的常用API
栈又称堆栈
boolean empty()
测试堆栈是否为空。
Object peek( )
查看堆栈顶部的对象,但不从堆栈中移除它。
Object pop( )
移除堆栈顶部的对象,并作为此函数的值返回该对象。
Object push(Object element)
把项压入堆栈顶部。
int search(Object element)
返回对象在堆栈中的位置,以 1 为基数。

京公网安备 11010502036488号