本文共 1240 字,大约阅读时间需要 4 分钟。
定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。
核心思路
为了实现一个能够返回栈中最小元素的O(1)时间复杂度的min函数,可以采用双栈的方法。主要思路如下:
双栈结构:设定两个栈,主栈(stackA)用于存储元素,辅助栈(stackMin)用于存储当前栈中最小的元素。 push操作:当向主栈push元素时,将元素与辅助栈顶部元素比较,较小者入辅助栈。 pop操作:同步弹出主栈和辅助栈的元素,保持两栈的栈顶元素一致。 时间复杂度:每个操作均为O(1),满足题目要求。 代码实现
import java.util.Stack;public class Solution { private Stack
功能解释
- push(Object obj):将元素obj加入主栈stackA,并根据 compareTo方法比较stackMin顶部元素,较小者保留在stackMin顶部。
- pop():同时从主栈和辅助栈弹出一个元素,确保两栈同步。
- top():返回主栈顶部元素。
- min():返回辅助栈顶部,即当前栈中最小的元素。
这种方法有效地保证了min函数的时间复杂度为O(1),同时维护了最小值,确保正确性。
转载地址:http://hepmz.baihongyu.com/