返回
LeetCode 1381 解读:用增量操作优雅实现栈
闲谈
2024-01-07 11:38:21
引言
栈是一种常见的数据结构,具有后进先出(Last-In-First-Out)的特点,通常用数组或链表实现。在传统栈中,我们只能进行压栈和弹栈操作。LeetCode 1381 题要求我们设计一个栈,除了支持传统的压栈和弹栈操作外,还支持一个增量操作。增量操作可以将栈中所有元素都增加一个给定的值。
算法分析
为了实现这个功能,我们需要修改栈的实现方式。我们可以使用一个数组来存储栈中的元素,同时维护一个额外的变量 increment
来记录当前栈中所有元素的增量值。当我们进行压栈操作时,我们将元素压入栈顶,并将 increment
更新为当前栈顶元素的值。当我们进行弹栈操作时,我们将栈顶元素弹出,并将 increment
更新为新的栈顶元素的值。
当我们进行增量操作时,我们将 increment
增加给定的值。这样,栈中所有元素都会增加这个值。
代码实现
下面是使用 C++、Java 和 Python 实现的代码:
C++ 代码:
class CustomStack {
public:
CustomStack(int maxSize) : maxSize(maxSize), top(-1), increment(0) {}
void push(int x) {
if (top < maxSize - 1) {
stack[++top] = x;
}
}
int pop() {
if (top >= 0) {
int res = stack[top--];
increment = 0;
return res;
}
return -1;
}
void increment(int k) {
increment += k;
}
private:
int maxSize;
int top;
int increment;
int stack[10000];
};
Java 代码:
class CustomStack {
private int[] stack;
private int top;
private int increment;
public CustomStack(int maxSize) {
stack = new int[maxSize];
top = -1;
increment = 0;
}
public void push(int x) {
if (top < stack.length - 1) {
stack[++top] = x;
}
}
public int pop() {
if (top >= 0) {
int res = stack[top--];
increment = 0;
return res;
}
return -1;
}
public void increment(int k) {
increment += k;
}
}
Python 代码:
class CustomStack:
def __init__(self, maxSize: int):
self.maxSize = maxSize
self.stack = []
self.increment = 0
def push(self, x: int) -> None:
if len(self.stack) < self.maxSize:
self.stack.append(x)
def pop(self) -> int:
if self.stack:
res = self.stack.pop()
self.increment = 0
return res
return -1
def increment(self, k: int) -> None:
self.increment += k
## 总结
LeetCode 1381 题是一个很有意思的题目,要求我们设计一个支持增量操作的栈。通过这道题,我们可以学习到如何修改栈的实现方式来支持新的操作。希望本文对你有帮助,也欢迎你提出问题和建议。