python 用一个数组实现三个栈

描述如何只用一个数组来实现三个栈 题目:描述如何只用一个数组来实现三个栈 int stackSize=100; int [] buffer=new int [stackSize*3]; int []stackPointer={-1,-1,-1};//用于追踪栈顶元素的指针 void push(int stackNum,int value) throws Exception { /*检查有无空闲空间*/ if( 阅读详情

| 用一个数组实现三个栈

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

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

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

示例1:

 输入:
["TripleInOne", "push", "push", "pop", "pop", "pop", "isEmpty"]
[[1], [0, 1], [0, 2], [0], [0], [0], [0]]
 输出:
[null, null, null, 1, -1, -1, true]
说明:当栈为空时`pop, peek`返回-1,当栈满时`push`不压入元素。
示例2:

 输入:
["TripleInOne", "push", "push", "push", "pop", "pop", "pop", "peek"]
[[2], [0, 1], [0, 2], [0, 3], [0], [0], [0], [0]]
 输出:
[null, null, null, null, 2, 1, -1, -1]

| 题解

class TripleInOne:

    def __init__(self, stackSize: int):     # stackSize是栈的大小
        self.stack = [0 for i in range(stackSize * 3)]  # 初始化三倍stackSize的列表存放3个栈
        self.ptr1 = 0   # 第一个栈的指针,起始位置是列表的0位置
        self.ptr2 = 0 + stackSize    # 第二个栈的指针,起始位置是列表的stackSize位置
        self.ptr3 = 0 + 2 * stackSize  # 第三个栈的指针,起始位置是列表的2*stackSize位置
        self.stackSize = stackSize  # 每一个栈的大小

    def push(self, stackNum: int, value: int) -> None:
        if stackNum == 0 and 0 <= self.ptr1 < self.stackSize:   # 往第一个栈加入元素
            self.stack[self.ptr1] = value  
            self.ptr1 += 1
        elif stackNum == 1 and self.stackSize <= self.ptr2 < 2 * self.stackSize:  # 往第二个栈加入元素
            self.stack[self.ptr2] = value
            self.ptr2 += 1
        elif stackNum == 2 and 2 * self.stackSize <= self.ptr3 < 3 * self.stackSize:  # 往第三个栈加入元素
            self.stack[self.ptr3] = value
            self.ptr3 += 1

    def pop(self, stackNum: int) -> int:  # pop() 返回栈顶元素,并在进程中删除它
        if stackNum == 0 and 0 < self.ptr1 <= self.stackSize: # 从第一个栈删除一个元素
            self.ptr1 -= 1
            return self.stack[self.ptr1]
        elif stackNum == 1 and self.stackSize < self.ptr2 <= 2 * self.stackSize: # 从第二个栈删除一个元素
            self.ptr2 -= 1
            return self.stack[self.ptr2]
        elif stackNum == 2 and 2 * self.stackSize < self.ptr3 <= 3 * self.stackSize:  # 从第三个栈删除一个元素
            self.ptr3 -= 1
            return self.stack[self.ptr3]
        return -1

    def peek(self, stackNum: int) -> int:  # peek() 返回栈顶元素,但不在堆栈中删除它
        if stackNum == 0 and 0 < self.ptr1 <= self.stackSize:  # 返回第一个栈的栈顶元素
            return self.stack[self.ptr1-1]
        elif stackNum == 1 and self.stackSize < self.ptr2 <= 2 * self.stackSize: # 返回第二个栈的栈顶元素
            return self.stack[self.ptr2-1]
        elif stackNum == 2 and 2 * self.stackSize < self.ptr3 <= 3 * self.stackSize: # 返回第三个栈的栈顶元素
            return self.stack[self.ptr3-1]
        return -1

    def isEmpty(self, stackNum: int) -> bool: 
        if stackNum == 0 and self.ptr1 == 0:
            return True
        elif stackNum == 1 and self.ptr2 == 0 + self.stackSize:
            return True
        elif stackNum == 2 and self.ptr3 == 0 + 2 * self.stackSize:
            return True
        return False


# Your TripleInOne object will be instantiated and called as such:
# obj = TripleInOne(stackSize)
# obj.push(stackNum,value)
# param_2 = obj.pop(stackNum)
# param_3 = obj.peek(stackNum)
# param_4 = obj.isEmpty(stackNum)
python用一个数组实现两个栈 去了某公司面试 ,一道笔试题目为:用一个数组实现两个栈。python中其实是有一个库叫array(我使用的是python3.X),其作用为 """ This module defines an object type which can efficiently represent an array of basic values: characters, integers, floating 阅读详情

相关推荐

Python 采用数组、链表实现栈(Stack)

前面我们已经实现了Python 采用列表实现栈(Stack),那时我们将列表的末尾看作是栈的顶,列表方法append就是将元素压入栈中,而列表方法pop会删除并返回栈顶的元素,这种选择的主要缺点是,所有其它的列表操作也都可以操作这个栈,这包括了在任意位置插入、替换和删除元素。这些额外的操作违反了栈作为一种抽象数据类型的本意。栈接口栈接口中的方法栈方法作用s.isEmpty()如果是空返回True,...

dta0502的博客 3217

【leetcode-python】面试题 03.01. 三合一

三合一。描述如何只用一个数组来实现三个栈。 你应该实现push(stackNum, value)、pop(stackNum)、isEmpty(stackNum)、peek(stackNum)方法。stackNum表示栈下标,value表示压入的值。 构造函数会传入一个stackSize参数,代表每个栈的大小。 示例1: 输入: ["TripleInOne", "push", "push", "pop", "pop", "pop", "isEmpty"] [[1], [0, 1], [0, 2],

hbk5241的博客 343

⑨【从0制作自己的ros导航小车:上位机篇】04、使用gmapping建图

前面的文章已经能够实现在odom坐标系下显示小车模型和里程计数据了,本文加上激光slam必不可少的传感器雷达,先进行测试,然后直接开始建图!

海风的博客 2916

java中Stack的peek方法

一、用法: java里Stack的peek方法是返回栈顶的元素但不移除它。 但Stack的pop方法是会移除的。 二、原因剖析:      (1)这是JDK中的peek方法的源码    /**      * Looks at the object at the top of this stack without removing it      * from the stack.

alan_gaohaodong的博客 5万+

【寄存器模型】一、一个简单的寄存器模型

在描述寄存器模型之前,首先来了解一下实际寄存器的组成结构:如下图所示的DUT内部真实的寄存器寄存器中最小的一个单位是域(field),域是由一个或多个bit拼接而成的。一个或多个域就构成了一个寄存器(reg)。一个或多个寄存器就构成了一个块(block)。将DUT中的寄存器抽象出来,建立寄存器模型,如下图所示:uvm library已经定义好了field、reg、block等相关的概念,构建寄存器模型时,只需要继承这些类即可。:构建寄存器模型中的域段。uvm_reg。...

carrotbanana的博客 5368

arcgis建筑数据的矢量化(一)

简单来说,建筑数据的获取无外乎是矢量化和去网站下载 无奈的是,osm和网上的建筑数据只有全国的主要城市,实在是为难我们这些小城市的,百度和天地图上是有建筑数据,无奈人家不要开放下载啊,所以就只能矢量化咯, 矢量化,无外乎手动和自动,手动就是新建shp面手动勾绘,这里就不讲了,我们来看看自动矢量化 自动矢量化在arcgis中主要是利用arcscan和栅格转面(栅格转面这个效果真是一言难尽,所以我们主要讨论arcscan) 同时我们矢量化也不一定要局限于arcgis...

Jasenjane的博客 3927

【栈】三合一

这道题是一道简单题,就是考查栈操作,这里我用了2种方式:一维数组和二维数组,从效率上讲使用二维数组更快。如果有更高效、简洁的方法,欢迎回复。

weiliuhong1的专栏 459

[XJTUSE DATABASE]——第三章 关系数据库标准语言SQL

新年了,来个大的,写了好几天,将近9000字,希望对大家有所帮助

weixin_47692652的博客 3120

在一个数组里面实现三个栈

* 使用一个数组来实现三个栈: * 这个问题是数组实现一个栈的升级版本, * 一个数组实现两个栈比较的简单,可以从数组的两端到中间,也可以从中间到两端,以至于实现三个四个五个栈都行,关键是要记住栈的开始处,当栈的容量不够时做好调整 * 就单单对这个问题而言,一个数组实现三个栈又有一下两种处理方式: * 1、把数组均分成三部分 [0, n/3) [n/3, 2n/3) [2n/3, n-1...

apple3515的博客 285

手把手教你用GD32F407VET6的EXMC驱动外部SRAM,搞定大内存需求

本文详细介绍了如何使用GD32F407VET6的EXMC外设驱动外部SRAM,解决嵌入式开发中的大内存需求问题。通过硬件连接方案、EXMC时序配置与初始化步骤,以及软件集成与内存管理技巧,帮助开发者快速实现内存扩展。特别适合需要处理图形显示缓冲、音频处理等大内存场景的GD32F407开发者。

weixin_30752699的博客 346

【Qt】QML-01:使用QtCreator10创建QML工程,并讲解第一个程序:Hello World

QML第一讲:创建QML工程、详解QML第一个程序Hello World

郭老二 7796

Python中的堆和栈

Python中的堆和栈。

centyuan的博客 3148

Vue3 - 完美解决html2canvas截图不全问题,截图只截取当前可视区域导出图片不全,截屏导出的图片显示不全只有一部分或缺一块,vue3移动端H5网页项目使用html2canvas插件长截图!

vue3,html2canvas,移动端H5网页,截图不全,html2canvas长截图不全,保存长截图,页面滚动导致截图不全,网页下方截屏不到怎么办,底部一部分无法截屏到,保存的图片少了一大块,H5海报截图不完整,怎么截取滚动条下方的内容,截图图时图片不全,截图图片只有一半的问题,底部内容空白,截图空白问题的解决,截图不全怎么办,html2canvas.js网页截图功能(解决截图不全问题,移动端ios系统截图不完整,html2canvas截图太长又不能删减截取不到,使用HTML2Canvas在H5页面上实

🏆 前端领域优质创作者 1万+

LeetCode题解(面试03.01):用一个数组实现三个栈(Python)

题目:原题链接(简单) 标签:设计、栈 解法 时间复杂度 空间复杂度 执行用时 Ans 1 (Python) 所有方法 : O(1)O(1)O(1) O(N)O(N)O(N) 164ms (90.85%) Ans 2 (Python) Ans 3 (Python) 解法一: class TripleInOne: def __init__(self, stackSize: int): self.size = stackSize

长行 527

Android系统开发工程师面试指南与参考答案

本文整理了Android系统开发工程师面试常见问题与参考答案。核心内容涵盖:1)Framework层定制方法,如修改HAL和系统服务;2)ANR问题分析工具(systrace)与解决方案;3)性能优化实践,包括开机加速和功耗管理;4)四大组件工作机制与应用案例;5)Native崩溃调试技巧。文章强调通过AOSP源码研究、工具使用和项目案例准备来提升面试表现,重点考察应聘者的系统开发深度和实操能力。参考答案均基于实际开发经验,提供可量化的优化成果说明。

郑伟强dev的专栏 256

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

一个数组实现三个栈

基本思想是: 第一个栈 为数组头,栈增长方向向上; 第二个栈,数据尾,栈增长方向向下, 第三个栈,在数组中间,栈增长方向向下; 第一个与第二个栈不用搬迁,因为他们都在数组的端,第三个栈,需要搬迁,来满足三个栈对空间的需求, 搬迁的策略: 采用慵懒的策略,只有三个栈中其中一个进行push操作是,如果没有足够的空间,才搬迁第三个栈; 代码: class threeStackUs

kappen123的专栏 1032

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

数据结构(二):一个数组固定分割实现三个栈

//一个数组固定分割实现三个栈 public class StackByArray { //栈大小 int stackSize = 100; //三个栈的栈顶指针 int[] stactTopOfStack = {-1,-1,-1}; //存放数据的数组 int[] theArray = new int[stackSize*3]; //入栈方...

会玩代码的劫 183

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

lintcode练习-224. 用一个数组实现三个栈

描述 用一个数组实现三个栈。你可以假设这三个栈都一样大并且足够大。你不需要担心如果一个栈满了之后怎么办。 您在真实的面试中是否遇到过这个题?  是 样例 ThreeStacks(5) // create 3 stacks with size 5 in single array. stack index from 0 to 2 push(0, 10) // push 10 in the ...

云中寻雾的博客 993

Chapter 3 | Stacks and Queues--一个数组实现三个栈

3.1 Describe how you could use a single array to implement three stacks.

wenqian 'blog 3241

程序员面试金典(8)一个数组实现三个栈

#include #include #include #include using namespace std; int stackSize = 100; int* buffer = new int[stackSize * 3]; int stackPointer[3] = {-1, -1, -1}; void push(int stackNum, int valu

花开无言 690

数组实现简单的栈结构

栈最大的特点就是先入后出,先看一下简单的API public int size() //返回栈中数据个数 public void push(Item item) //进栈 public Item pop() //出栈 public boolean isEmpty() //是否为空 自定义的栈要实现迭代器功能 实现 Iterable接口,需要存储所有的结构所以使用泛型。 具体代码实现...

qq_37520037的博客 422

列表/数组全排列-python

全排列切片调换顺序 针对一个数组/列表进行全排列有两种方法,一种是切片的方法,一种是调换顺序 切片 切片的方法实际上和高中数学讲的是一样的,有一个n维列表/数组,第一个位置有n种选择,第二个有n-1中选择(不包括前一个第一个选中的数),依次类推。。。 def perm(data): if len(data) == 1:#和阶乘一样,需要有个结束条件 return [data] r = []...

m0_38008539的博客 3770

[算法和数据结构入门]用Python的数组实现一个栈的作用

实现一个栈 题目描述: 1.使用数组实现一个栈的数据结构,要求具有以下方法: 压栈:在栈顶插入元素 弹栈:弹出栈顶元素 获取栈顶元素 判断栈是否为空 获取栈中元素个数 2.栈操作 新建一个栈(命名为s1) 将数组ls_1 按索引从小到大进行压栈 输出栈中元素个数 获取栈顶元素,保存在变量s1_gettop中,观察栈中元素个数 弹出栈顶元素,保存在变量s1_poptop中,观察栈中元素个数 ...

KaelCui的博客 449

cci-Q3.1 一个数组实现三个栈

原文: Describe how you could use a single array to implement three stacks. 译文: 你如何只用一个数组实现三个栈? 根据栈的大小,申请一个3*stacksize的数组。 public class stack3 { int[] buffer = null; int size = 0;

小象吃西瓜 662

一个数组实现两个栈

看到题目,首先要考虑什么是数组,什么是栈,两者的特性都是怎样的,其次再考虑如何实现题目要求。通常会想到:方法一:栈1从数组的开头开始,栈2从数组的末尾开始,这样比较节省空间,当栈1和栈2的栈顶相遇时,我们就进行扩容。方法二:既然方法一可以从两边开始,那么我们也可以从中间开始向两边延伸,但这样有可能就会造成空间浪费,比如某一个栈分配了大量的空间,可是实际其只有一两个数据。方法三:在讨论中,有的同学建...

Liudengdeng_的博客 529

面试题:一个数组实现两个栈

一个数组实现两个栈 问题分析         利用顺序表模拟实现栈(一个数组实现一个栈) 问题解决 方案一:      一个数组从中间分为两部分,中间左端为栈1,中间右端为栈2;      示例图:       存在缺点:方案一会存在当一个栈满了,另一个栈还是空的的现象,这样产生浪费空间的问题。 方案二:       一个数组的两端分别作为两个栈的

xc的博客 2042
上一篇: python 最小栈
下一篇: python 计算器
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一叶知秋的BLOG

创作不易 请多多关注

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值