这里就体现出刷题的好处了,刷的多了就会遇到重复的题目。
思路有了之后便是逻辑编码 再就可以迎刃而解了。
本题收录在 《程序员代码面试指南》的第一题。
我是用的是 两个栈,[一个只存最小值(值唯一),一个存原值] 的省空间方法。
还有[维护高度相同的两个栈,一个存原值,一个存最小值] 的省时间方法。
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 为基数。