LeetCode 1381. 设计一个支持增量操作的栈

2021-09-13 10:27:49 浏览数 (1)

题目地址(1381. 设计一个支持增量操作的栈)

https://leetcode-cn.com/problems/design-a-stack-with-increment-operation/

题目描述

代码语言:txt复制
请你设计一个支持下述操作的栈。



实现自定义栈类 CustomStack :



CustomStack(int maxSize):用 maxSize 初始化对象,maxSize 是栈中最多能容纳的元素数量,栈在增长到 maxSize 之后则不支持 push 操作。

void push(int x):如果栈还未增长到 maxSize ,就将 x 添加到栈顶。

int pop():弹出栈顶元素,并返回栈顶的值,或栈为空时返回 -1 。

void inc(int k, int val):栈底的 k 个元素的值都增加 val 。如果栈中元素总数小于 k ,则栈中的所有元素都增加 val 。



 



示例:



输入:

["CustomStack","push","push","pop","push","push","push","increment","increment","pop","pop","pop","pop"]

[[3],[1],[2],[],[2],[3],[4],[5,100],[2,100],[],[],[],[]]

输出:

[null,null,null,2,null,null,null,null,null,103,202,201,-1]

解释:

CustomStack customStack = new CustomStack(3); // 栈是空的 []

customStack.push(1);                          // 栈变为 [1]

customStack.push(2);                          // 栈变为 [1, 2]

customStack.pop();                            // 返回 2 --> 返回栈顶值 2,栈变为 [1]

customStack.push(2);                          // 栈变为 [1, 2]

customStack.push(3);                          // 栈变为 [1, 2, 3]

customStack.push(4);                          // 栈仍然是 [1, 2, 3],不能添加其他元素使栈大小变为 4

customStack.increment(5, 100);                // 栈变为 [101, 102, 103]

customStack.increment(2, 100);                // 栈变为 [201, 202, 103]

customStack.pop();                            // 返回 103 --> 返回栈顶值 103,栈变为 [201, 202]

customStack.pop();                            // 返回 202 --> 返回栈顶值 202,栈变为 [201]

customStack.pop();                            // 返回 201 --> 返回栈顶值 201,栈变为 []

customStack.pop();                            // 返回 -1 --> 栈为空,返回 -1





 



提示:



1 <= maxSize <= 1000

1 <= x <= 1000

1 <= k <= 1000

0 <= val <= 100

每种方法 increment,push 以及 pop 分别最多调用 1000 次

前置知识

公司

  • 暂无

思路

关键点

代码

  • 语言支持:Python3

Python3 Code:

代码语言:txt复制
class CustomStack:

    maxSize = 0

    stack = []



    def __init__(self, maxSize: int):

        self.maxSize = maxSize

        self.stack = list()





    def push(self, x: int) -> None:

        if len(self.stack) < self.maxSize:

            self.stack.append(x)



    def pop(self) -> int:

        if len(self.stack) > 0:

            return self.stack.pop()

        else:

            return -1



    def increment(self, k: int, val: int) -> None:

        if len(self.stack) >= k:

            for i in range(0,k):

                self.stack[i]  = val

        else:

            for i in range(len(self.stack)):

                self.stack[i]  = val





# Your CustomStack object will be instantiated and called as such:

# obj = CustomStack(maxSize)

# obj.push(x)

# param_2 = obj.pop()

# obj.increment(k,val)

**复杂度分析**

令 n 为数组长度。

  • 时间复杂度:$O(n)$
  • 空间复杂度:$O(n)$

0 人点赞