剑指Offer之包含min函数的栈
2018-03-09 15:57
344 查看
题目描述
定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。
思路:
1、借助一个辅助栈stack2,这个栈内存放着栈最小元素的值,并且栈顶元素的值永远是最小的。
2、入栈时,需要判断stack2的栈顶元素是否大于要入栈的值,若是大于,则将值入至stack2。
3、出栈时,需要判断栈顶的值与辅助栈顶的值是否相等,相等则一起出栈,否则只有栈顶的值出栈。
4、求min()时只需要将辅助栈顶peek()就OK了。
贴代码:
定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。
思路:
1、借助一个辅助栈stack2,这个栈内存放着栈最小元素的值,并且栈顶元素的值永远是最小的。
2、入栈时,需要判断stack2的栈顶元素是否大于要入栈的值,若是大于,则将值入至stack2。
3、出栈时,需要判断栈顶的值与辅助栈顶的值是否相等,相等则一起出栈,否则只有栈顶的值出栈。
4、求min()时只需要将辅助栈顶peek()就OK了。
贴代码:
import java.util.Stack; public class Solution { //借助一个辅助栈 Stack<Integer> stack1 = new Stack<>(); Stack<Integer> stack2 = new Stack<>();//栈顶的数永远是最小的数 //当压栈时,需要判断压栈的数是否比辅助栈中栈顶的数小 public void push(int node) { stack1.push(node); if(stack2.isEmpty()){ stack2.push(node); } else{ //压栈数据比栈内最小值小,则往stack2压栈 if(node <= stack2.peek()){ stack2.push(node); } } } //弹栈的时候如果栈顶元素和最小值栈元素相等则一起弹栈,否则只是栈顶弹栈 public void pop() { if(stack1.isEmpty()){ return; } if(stack1.peek() == stack2.peek()){ stack2.pop(); } stack1.pop(); } public int top() { if(!stack1.isEmpty()){ return stack1.peek(); } return 0; } public int min() { if(!stack2.isEmpty()){ return 4000 stack2.peek(); } return 0; } }
相关文章推荐
- 剑指offer——包含min函数的栈
- 剑指offer--面试题30:包含min函数的栈
- 牛客网-剑指offer-20-包含min函数的栈
- 剑指offer-包含min函数的栈
- 【剑指offer】包含min函数的栈
- 【剑指offer】面试题21:包含min函数的栈
- 剑指Offer学习总结-包含min函数的栈
- 剑指offer-20.包含min函数的栈
- 剑指offer——20.包含min函数的栈
- 【剑指offer】数据结构 ——包含min函数的栈(C++)
- 剑指offer 包含min函数的栈
- 【剑指offer】面试题21:包含min函数的栈
- 【剑指offer】实现包含min函数的栈
- 剑指OFFER之包含min函数的栈(九度OJ1522)
- 剑指offer 21. 包含min函数的栈
- 剑指offer面试题21 包含min函数的栈
- 剑指offer第20题(包含min函数的栈)
- 剑指Offer——包含min函数的栈
- 剑指Offer----包含min函数的栈
- 【剑指offer-Java版】21包含min函数的栈