编程语言
首页 > 编程语言> > 程序员面试金典 - 面试题 03.01. 三合一

程序员面试金典 - 面试题 03.01. 三合一

作者:互联网

题目难度: 简单

原题链接

今天继续更新程序员面试金典系列, 大家在公众号 算法精选 里回复 面试金典 就能看到该系列当前连载的所有文章了, 记得关注哦~

题目描述

三合一。描述如何只用一个数组来实现三个栈。

你应该实现 push(stackNum, value)、pop(stackNum)、isEmpty(stackNum)、peek(stackNum)方法。stackNum 表示栈下标,value 表示压入的值。

构造函数会传入一个 stackSize 参数,代表每个栈的大小。

示例 1:

示例 2:

题目思考

  1. 需要定义哪些辅助变量?

解决方案

思路

复杂度

代码

class TripleInOne:
    def __init__(self, stackSize: int):
        # 预留空间, 记录每个栈的栈顶元素下标和元素个数
        self.stackSize = stackSize
        self.stack = [0] * stackSize * 3
        self.index = [-1, stackSize - 1, stackSize * 2 - 1]
        self.len = [0, 0, 0]

    def push(self, stackNum: int, value: int) -> None:
        if self.isFull(stackNum):
            return
        self.index[stackNum] += 1
        self.len[stackNum] += 1
        self.stack[self.index[stackNum]] = value

    def pop(self, stackNum: int) -> int:
        if self.isEmpty(stackNum):
            return -1
        res = self.stack[self.index[stackNum]]
        self.index[stackNum] -= 1
        self.len[stackNum] -= 1
        return res

    def peek(self, stackNum: int) -> int:
        if self.isEmpty(stackNum):
            return -1
        res = self.stack[self.index[stackNum]]
        return res

    def isFull(self, stackNum: int) -> bool:
        return self.len[stackNum] == self.stackSize

    def isEmpty(self, stackNum: int) -> bool:
        return self.len[stackNum] == 0

大家可以在下面这些地方找到我~

标签:面试题,int,金典,self,pop,stackNum,push,stackSize,03.01
来源: https://blog.csdn.net/zjulyx1993/article/details/112132317