返回

LeetCode 1381 解读:用增量操作优雅实现栈

闲谈

引言

栈是一种常见的数据结构,具有后进先出(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 题是一个很有意思的题目,要求我们设计一个支持增量操作的栈。通过这道题,我们可以学习到如何修改栈的实现方式来支持新的操作。希望本文对你有帮助,也欢迎你提出问题和建议。