剑指offer每日一题算法题(java解法)
方便日后复习,从今天开始。
算法之行始于足下
[编程题]包含min函数的栈-- Java实现
------------------------------------------------------------------------------------------------------
题目描述
定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。
前提:
1.熟悉栈的操作原理,进出规则。
2.了解栈的基本方法,push,pop,peek等
解题思路:
1.利用了一个辅助栈进行存值,每次给第一个栈存的时候,都要看看是不是比第二个栈里的值大,不是的话就给第二个栈也push,这样就能保证第二个栈的栈顶绝对是最小值.
2.出栈的时候,只有2个栈顶的值相等第二个栈才会出栈,这样保证了出去之后,下一个栈顶还是最小值
import java.util.Stack;
public class Solution {
Stack<Integer> stack1=new Stack<Integer>();
Stack<Integer> stack2=new Stack<Integer>();
public void push(int node) {
stack1.push(node);
if(stack2.empty()){
stack2.push(node);
}
if(stack1.peek()<=stack2.peek()){
stack2.push(node);
}
}
public void pop() {
if(stack1.peek()==stack2.peek()){
stack2.pop();
}
stack1.pop();
}
public int top() {
return stack1.peek();
}
public int min() {
return stack2.peek();
}
}