面试题21:栈:包含min函数的栈
来源:互联网 发布:淘宝3c证书号要怎么填 编辑:程序博客网 时间:2024/06/01 15:16
题目描述定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。
方法一:
只有一个栈空间,节省空间,但是min方法的时间复杂度是O(n)
import java.util.Stack;public class Solution { private Stack<Integer> stack = new Stack<>(); public void push(int node) { stack.push(node); } public void pop() { stack.pop(); } public int top() { return stack.peek(); } public int min() { if(stack.empty()) { throw new RuntimeException("The stack is already empty"); } int min = top(); for(int a : stack) { if(a < min) { min = a; } } return min; }}
方法二:
思路:
把每次的最小元素(之前的最小元素和新压入战的元素两者的较小值)都保存起来放到另外一个辅助栈里。
如果每次都把最小元素压入辅助栈, 那么就能保证辅助栈的栈顶一直都是最小元素.当最小元素从数据栈内被弹出之后,同时弹出辅助栈的栈顶元素,此时辅助栈的新栈顶元素就是下一个最小值。
import java.util.Stack;public class Solution { // 数据栈,用于存放插入的数据 private Stack<Integer> dataStack = new Stack<>(); // 最小数位置栈,存放数据栈中最小的数的位置 private Stack<Integer> minStack = new Stack<>(); public void push(int node) { dataStack.push(node); if(dataStack.size() == 1) { minStack.push(0); } else { if(node < dataStack.get(minStack.peek())) { minStack.push(dataStack.size() - 1); } else { minStack.push(minStack.peek()); } } } public void pop() { if (dataStack.isEmpty()) { throw new RuntimeException("The stack is already empty"); } dataStack.pop(); minStack.pop(); } public int top() { if (dataStack.isEmpty()) { throw new RuntimeException("The stack is already empty"); } minStack.pop(); return dataStack.pop(); } public int min() { if (dataStack.isEmpty()) { throw new RuntimeException("The stack is already empty"); } return dataStack.get(minStack.peek()); }}
涉及的知识点:
Stack
阅读全文
0 0
- 面试题21:栈:包含min函数的栈
- [剑指offer][面试题21]包含min函数的栈
- 剑指offer 面试题21:包含min函数的栈
- 【剑指offer】面试题21:包含min函数的栈
- 【剑指offer】面试题21:包含min函数的栈
- 剑指Offer:面试题21 包含min函数的栈
- 面试题21 包含min函数的栈
- 剑指offer 面试题21 包含min函数的栈
- 面试题21:包含min函数的栈
- 《剑指Offer》面试题21:包含min函数的栈
- 面试题21:包含min函数的栈
- 面试题21包含min函数的栈
- 剑指offer面试题21-包含min函数的栈
- 面试题21包含min函数的栈
- 面试题21:包含min函数的栈
- 剑指offer-面试题21:包含min函数的栈
- 剑指Offer----面试题21:包含min函数的栈
- 面试题21:包含min函数的栈
- 《凸优化理论》-----共轭函数
- [scope.strip() for scope in flags.split(',')]
- ROS节点,消息,话题,服务的介绍
- Android 关于SP读取与存储正确打开方式?
- Oracle中的 NVL,NVL2,NULLIF,COALESCE 函数
- 面试题21:栈:包含min函数的栈
- 神经网络纹理合成和损失函数风格转移
- RTMP header解析
- [YTU]_2640( 编程题:运算符重载---矩阵求和)
- JAVA 关键字
- 十进制转换成二进制
- php入门学习-----抽象
- C语言中->是什么意思啊?
- springboot利用缓存存储对象从新获取异常