1. 最小栈设计与实现解析
最小栈(Min Stack)是一种特殊的数据结构,它能在常数时间内返回栈中的最小元素。这个看似简单的需求在实际开发中经常遇到,比如电商系统中需要实时追踪价格波动的最小值,或者游戏开发中需要记录玩家分数的最低记录。
1.1 核心设计思路
传统栈结构无法直接获取最小值,因为最小值可能在任何位置。最直接的暴力解法是每次调用getMin()时遍历整个栈,但这样时间复杂度是O(n),无法满足高频调用场景。
**优化方案**采用空间换时间的策略:每个栈元素存储一个二元组(val, current_min)。其中:
- val:实际存入的值
- current_min:到当前元素为止的最小值
这种设计下:
- push操作:比较新元素与当前最小值,更新current_min
- pop操作:直接移除栈顶元素(自动维护最小值状态)
- top/getMin操作:直接访问栈顶元素的对应字段
python复制class MinStack:
def __init__(self):
self.st = [(0, float('inf'))] # 哨兵节点简化边界判断
def push(self, val: int) -> None:
self.st.append((val, min(val, self.st[-1][1])))
def pop(self) -> None:
self.st.pop()
def top(self) -> int:
return self.st[-1][0]
def getMin(self) -> int:
return self.st[-1][1]
1.2 复杂度分析与优化空间
时间复杂度:
- 所有操作都是O(1),完美满足题目要求
空间复杂度:
- 额外存储了current_min,空间翻倍
- 实际工程中可以优化为两个栈:一个存数据,一个存最小值序列
实际应用时要注意:如果元素是复杂对象,min比较需要自定义__lt__方法。在分布式系统中,这种设计可能要考虑最小值的线程安全问题。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 字符串解码算法深度剖析
字符
