题目描述:
定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。
解题思路:
解法一:使用两个stack,一个为数据栈,另一个为辅助栈。数据栈用于存储所有数据,每次压栈的最小元素(之前的最小元素和新压入栈中的元素,二者的较小值)保存起来放入辅助栈。 解法二:最小元素每一次都进栈,会有重复,也可以只有当进栈元素小于或等于之前的最小元素时,最小元素才进栈,而当弹出元素等于最小元素时,最小元素才出栈,从而节省一部分空间。 解法三:定义一个组合变量,比如Node,包括数据和最小元素两个成员变量,从而节省一个栈,但是本质仍然没有变。
举例:
编程实现(Java):
//解法一:
public class Solution {
/*
思路:需要一个辅助栈空间,对应保存当前数据栈的最小值
*/
Stack stack=new Stack();
Stack minStack = new Stack(); //辅助栈
public void push(int node) {
stack.push(node);
if(minStack.empty()) //将当前最小值存入辅助栈
minStack.push(node);
else
minStack.push(node > minStack.peek() ? minStack.peek(): node);
}
public void pop() { //两个都出栈
if(!stack.empty()){
stack.pop();
minStack.pop();
}
}
public int top() {
return stack.peek();
}
public int min() {
return minStack.peek();
}
}
//解法二:
class MinStack {
private Stack dataStack; //数据栈
private Stack minStack; //存放最小元素的栈
/** initialize your data structure here. */
public MinStack() {
dataStack=new Stack();
minStack=new Stack();
}
public void push(int x) {
if(minStack.isEmpty() || x
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?