网易首页 > 网易号 > 正文 申请入驻

2024-03-09:用go语言,我们把无限数量的栈排成一行,按从左到右

0
分享至

2024-03-09:用go语言,我们把无限数量的栈排成一行,按从左到右的次序从 0 开始编号,

每个栈的的最大容量 capacity 都相同。实现一个叫「餐盘」的类 DinnerPlates,

DinnerPlates(int capacity) - 给出栈的最大容量 capacity,

void push(int val) 将给出的正整数 val 推入 从左往右第一个 没有满的栈,

int pop() 返回 从右往左第一个 非空栈顶部的值,并将其从栈中删除,

如果所有的栈都是空的,请返回 -1。

int popAtStack(int index) - 返回编号 index 的栈顶部的值,并将其从栈中删除,

如果编号 index 的栈是空的,请返回 -1。

输入:["DinnerPlates","push","push","push","push","push","popAtStack","push","push","popAtStack","popAtStack","pop","pop","pop","pop","pop"][[2],[1],[2],[3],[4],[5],[0],[20],[21],[0],[2],[],[],[],[],[]]。

输出:[null,null,null,null,null,null,2,null,null,20,21,5,4,3,1,-1]。

答案2024-03-09:

来自左程云。

灵捷3.5

大体步骤如下:

这个问题需要实现一个类,其中含有、、和四个方法。这个类可以理解成是具有固定容量的多个栈构成的一种数据结构。根据题目描述和提供的 Go 代码文件,这里来分步骤描述大体过程,然后讨论总的时间复杂度和总的空间复杂度。

DinnerPlates

Constructor

Push

Pop

PopAtStack

1.Constructor:

  • •当创建实例时,通过调用方法初始化一个 DinnerPlates 类型的实例。需要传入一个参数表示栈的最大容量。在这个方法中,将存储到实例字段中,并初始化、和三个切片。
  • DinnerPlates
  • Constructor
  • capacity
  • capacity
  • stack
  • top
  • poppedPos

2.Push:

  • •当调用方法时,将给定的整数值推入从左到右第一个没有满的栈。
  • Push
  • val
  • •如果所有栈都已满,应该创建一个新的栈来存储。
  • val
  • •如果有栈未满,则将推入最左侧未满的栈中,并更新数组和数组。
  • val
  • top
  • stack

3.Pop:

  • •当调用方法时,应该返回最右侧非空栈顶的值,并将其从栈中删除。如果所有的栈都为空,返回 -1。
  • Pop
  • •如果有非空的栈,应该找到最右侧非空栈并返回它的栈顶的值,然后将其值从栈中删除。

4.PopAtStack:

  • •当调用方法时,应该返回指定栈的栈顶的值,并将其从栈中删除。如果指定的栈为空,返回 -1。
  • PopAtStack
  • index
  • index
  • •需要更新数组和数组,以确保栈的一致性。
  • top
  • poppedPos

总的时间复杂度:

  • •Push 方法的时间复杂度为 O(1)。
  • •Pop 方法的时间复杂度为 O(1)。
  • •PopAtStack 方法的时间复杂度为 O(log n),其中 n 是被删除的元素的数量。

总的空间复杂度:

  • •需要 O(n) 的空间来存储栈中的所有元素,其中 n 是所有栈的元素数量。
  • go完整代码如下:

packagemain
import(
"fmt"
"sort"
)
typeDinnerPlatesstruct{
capacityint
stack[]int
top[]int
poppedPos[]int
}
funcConstructor(capacityint)DinnerPlates{
returnDinnerPlates{capacity,[]int{},[]int{},[]int{}}
}
func(this*DinnerPlates)Push(valint){
iflen(this.poppedPos)==0{
pos:=len(this.stack)
this.stack=append(this.stack,val)
ifpos%this.capacity==0{
this.top=append(this.top,0)
}else{
stackPos:=len(this.top)-1
stackTop:=this.top[stackPos]
this.top[stackPos]=stackTop+1
}
}else{
pos:=this.poppedPos[0]
this.poppedPos=this.poppedPos[1:]
this.stack[pos]=val
index:=pos/this.capacity
stackTop:=this.top[index]
this.top[index]=stackTop+1
}
}
func(this*DinnerPlates)Pop()int{
forlen(this.stack)>0&&len(this.poppedPos)>0&&this.poppedPos[len(this.poppedPos)-1]==len(this.stack)-1{
this.stack=this.stack[:len(this.stack)-1]
pos:=this.poppedPos[len(this.poppedPos)-1]
this.poppedPos=this.poppedPos[:len(this.poppedPos)-1]
ifpos%this.capacity==0{
this.top=this.top[:len(this.top)-1]
}
}
iflen(this.stack)==0{
return-1
}else{
pos:=len(this.stack)-1
val:=this.stack[pos]
this.stack=this.stack[:pos]
ifpos%this.capacity==0&&len(this.top)>0{
this.top=this.top[:len(this.top)-1]
}elseiflen(this.top)>0{
this.top[len(this.top)-1]-=1
}
returnval
}
}
func(this*DinnerPlates)PopAtStack(indexint)int{
ifindex>=len(this.top){
return-1
}
stackTop:=this.top[index]
ifstackTop<0{
return-1
}
this.top[index]=stackTop-1
pos:=index*this.capacity+stackTop
i:=sort.SearchInts(this.poppedPos,pos)
this.poppedPos=append(this.poppedPos,0)
copy(this.poppedPos[i+1:],this.poppedPos[i:])
this.poppedPos[i]=pos
returnthis.stack[pos]
}
funcmain(){
dinnerPlates:=Constructor(2)
dinnerPlates.Push(1)
dinnerPlates.Push(2)
dinnerPlates.Push(3)
dinnerPlates.Push(4)
dinnerPlates.Push(5)
fmt.Println(dinnerPlates.PopAtStack(0))
dinnerPlates.Push(20)
dinnerPlates.Push(21)
fmt.Println(dinnerPlates.PopAtStack(0))
fmt.Println(dinnerPlates.PopAtStack(2))
fmt.Println(dinnerPlates.Pop())
fmt.Println(dinnerPlates.Pop())
fmt.Println(dinnerPlates.Pop())
fmt.Println(dinnerPlates.Pop())
fmt.Println(dinnerPlates.Pop())
}



声明:个人原创,仅供参考

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
最新:落水失联两驴友被找到,人已死亡!“帮倒忙”抽烟男被骂惨

最新:落水失联两驴友被找到,人已死亡!“帮倒忙”抽烟男被骂惨

记录生活日常阿蜴
2024-06-04 17:28:40
这一次,存量房贷业主集体破防了!

这一次,存量房贷业主集体破防了!

魔都财观
2024-06-04 07:40:14
大陆已无法出席,ECFA协议再被削,不到24小时,赖清德憋出几句话

大陆已无法出席,ECFA协议再被削,不到24小时,赖清德憋出几句话

大白话瞰世界
2024-06-03 09:36:46
美大选最后关头,局势突然大变!特朗普点名中国,拜登始料未及

美大选最后关头,局势突然大变!特朗普点名中国,拜登始料未及

星辰故事屋
2024-06-03 18:41:43
《庆余年2》侯季常:范闲唯一身死的徒弟,为了做官可以不择手段

《庆余年2》侯季常:范闲唯一身死的徒弟,为了做官可以不择手段

娱乐八卦木木子
2024-06-04 13:07:33
将近40岁满脸褶,却尬演18岁少女,是谁给了她“强行装嫩”的勇气

将近40岁满脸褶,却尬演18岁少女,是谁给了她“强行装嫩”的勇气

娱乐圈十三太保
2024-05-28 13:56:53
北方人逛湖南菜市场,感觉自己来了外国:咋一个都不认识!

北方人逛湖南菜市场,感觉自己来了外国:咋一个都不认识!

阿龙美食记
2024-06-04 15:23:33
太奢侈!陆毅鲍蕾住上亿豪宅,一家四口吃个早餐碗碟竟接近30个!

太奢侈!陆毅鲍蕾住上亿豪宅,一家四口吃个早餐碗碟竟接近30个!

花花lo先森
2024-05-20 11:05:16
一女子被老公家暴,一丝不挂走在雨中:很多路人看到后掉头走了!

一女子被老公家暴,一丝不挂走在雨中:很多路人看到后掉头走了!

第7情感
2024-06-03 21:44:57
中国车企正在战术性撤退欧洲。

中国车企正在战术性撤退欧洲。

玉辞心
2024-06-02 20:17:13
退休人员好消息!养老金调整公布,企业退休能涨200元吗?

退休人员好消息!养老金调整公布,企业退休能涨200元吗?

社保小达人
2023-05-29 12:52:10
王一博身体状况惹担忧,被曝脱发还长疮,已经400多天没有戏拍!

王一博身体状况惹担忧,被曝脱发还长疮,已经400多天没有戏拍!

小咪侃娱圈
2024-06-03 16:36:13
85后落马副局长几次考公“上岸”失败,伪造学历走人才引进

85后落马副局长几次考公“上岸”失败,伪造学历走人才引进

澎湃新闻
2024-06-03 21:48:39
警号000001落马了,大快人心!

警号000001落马了,大快人心!

华人星光
2024-05-22 15:03:01
弃用朱婷闹大了!女排溃败2天官媒重拳出击 8字拷问蔡斌球迷叫好!

弃用朱婷闹大了!女排溃败2天官媒重拳出击 8字拷问蔡斌球迷叫好!

林子说事
2024-06-04 17:17:26
当之无愧!以下是中国女排主力球员的年薪情况!

当之无愧!以下是中国女排主力球员的年薪情况!

百里无心
2024-05-31 07:24:50
55岁邓文迪闪耀前夫婚礼,花枝招展的媒人,比其他三位前妻更友好

55岁邓文迪闪耀前夫婚礼,花枝招展的媒人,比其他三位前妻更友好

译言
2024-06-03 10:39:16
笑疯了!在自家公司上班是什么体验?网友:底薪200,全勤7800

笑疯了!在自家公司上班是什么体验?网友:底薪200,全勤7800

小陆搞笑日常
2024-05-30 20:01:59
蔚来最新周销量0.67万辆 连续3周位列新势力品牌第三

蔚来最新周销量0.67万辆 连续3周位列新势力品牌第三

手机中国
2024-06-04 17:10:12
恭喜张志磊!获沙特富豪赏识,出场费有望达到1亿,下场对手出炉

恭喜张志磊!获沙特富豪赏识,出场费有望达到1亿,下场对手出炉

十点街球体育
2024-06-04 15:23:23
2024-06-04 18:06:44
moonfdd
moonfdd
福大大架构师每日一题
411文章数 7关注度
往期回顾 全部

科技要闻

斯坦福团队抄袭国产大模型后道歉 承诺撤下

头条要闻

两驴友被溪流冲走溺亡 律师:拉绳的蓝衣男子可能担责

头条要闻

两驴友被溪流冲走溺亡 律师:拉绳的蓝衣男子可能担责

体育要闻

一位糖尿病患者,和他的24年皇马梦

娱乐要闻

杨幂留言为热巴庆生,姐妹情深惹人羡

财经要闻

又一座城市,房价“鹤岗化”了!

汽车要闻

2.0T+云辇-P+天神之眼 方程豹豹8还配软包内装

态度原创

旅游
家居
房产
数码
公开课

旅游要闻

去年中国156人死于户外探险

家居要闻

简而不冷 明朗的治愈能量

房产要闻

最新发布!海口居然还有这么多存量楼盘!

数码要闻

搭载酷睿 Ultra 第 1 代处理器,酷冷至尊展出 Mini X 迷你主机

公开课

近视只是视力差?小心并发症

无障碍浏览 进入关怀版