1. 问题背景与需求拆解
这道LeetCode中等难度题目要求我们设计一个支持增量操作的栈结构。常规栈只能进行push和pop操作,而这个特殊栈需要额外实现一个增量操作(increment),能够在栈底k个元素上同时增加一个特定值。
实际工程中这种数据结构常出现在需要批量更新历史记录的场景。比如电商平台的购物车商品数量调整、游戏中的连续道具加成、金融系统中的批量利息计算等场景。理解这种定制化数据结构的实现方式,能帮助我们在面对特殊业务需求时快速设计出高效解决方案。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 基础栈结构设计
2.1 常规栈实现分析
标准栈通常使用数组或链表实现。数组实现的优势在于:
- 内存连续,缓存友好
- 随机访问效率高
- 实现简单直观
但数组实现的缺点是扩容成本高。链表实现则相反:
- 动态扩容灵活
- 但节点分散导致缓存命中率低
- 需要额外存储指针空间
对于本题场景,由于需要频繁访问底部k个元素,数组的随机访问特性更具优势。我们可以先实现基础版本:
python复制class CustomStack:
def __init__(self, maxSize: int):
self.stack = []
self.capacity = maxSize
def push(self, x: int) -> None:
if len(self.stack) < self.capacity:
self.stack.append(x)
def pop(self) -> int:
return self.stack.pop() if self.stack else -1
2.2 增量操作初步实现
最直观的增量操作实现是直接遍历底部k个元素:
python复制def increment(self, k: int, val: int) -> None:
for i in range(min(k, len(self.stack))):
self.stack[i] += val
这种实现时间复杂度为O(k),在k接近n时会退化为O(n)。当频繁调用increment时(比如每push一次
