剑指 Offer 31. 栈的压入、弹出序列(golang版)

leetcode中文版-Coding-Interviews-Golang:剑指offer的Go实现完整版 leetcode中文版 剑指Offer - Golang实现 简介 一直没找到完整版的剑指Offer的Golang实现,所以索性自己来写。 每个文件夹对应每个题目,文件夹内的README.md内有题目和必要的分析,Problem*.go 是和算法相对应的代码。 如果大家使用的是Chrome,给推荐大家一个小插件:,这是一个极其方便的github Repo索引小插件,真的很方便。 运行代码 若题目对应包内有 *_test.go 文件,可直接执行go test进行单元测试 go test 若没有test文件,请直接执行 go run problemXXX.go 如果文档里有说明该题目是LeetCode上原题,请点击内附的LeetCode题目链接,并复制代码到LeetCode上执行。 如有错误或者更好的算法版本,欢迎各种PR~ 题目 立即下载
  • 题目描述
输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如,序列 {1,2,3,4,5} 是某栈的压栈序列,序列 {4,5,3,2,1} 是该压栈序列对应的一个弹出序列,但 {4,3,5,1,2} 就不可能是该压栈序列的弹出序列。

示例 1:
输入:pushed = [1,2,3,4,5], popped = [4,5,3,2,1]
输出:true
解释:我们可以按以下顺序执行:
push(1), push(2), push(3), push(4), pop() -> 4,
push(5), pop() -> 5, pop() -> 3, pop() -> 2, pop() -> 1

示例 2:
输入:pushed = [1,2,3,4,5], popped = [4,3,5,1,2]
输出:false
解释:1 不能在 2 之前弹出。
 
提示:
0 <= pushed.length == popped.length <= 1000
0 <= pushed[i], popped[i] < 1000
pushed 是 popped 的排列。

注意:本题与主站 946 题相同:https://leetcode-cn.com/problems/validate-stack-sequences/

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/zhan-de-ya-ru-dan-chu-xu-lie-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
  • 思路
    1、借助辅助栈,将pushed依次入栈tmp,如果tmp栈顶等于poped[i],tmp出栈,否则继续将pushed入栈,直到pushed为空
    2、将tmp栈与poped[i]之后的数作对比,若值不相等返回false

  • 代码

func validateStackSequences(pushed []int, popped []int) bool {
	tmp, i, j := make([]int,0), 0, 0
	for j < len(pushed){
		if pushed[j] == popped[i] {
			i ++
			j ++
		}else if len(tmp) > 0 && tmp[len(tmp)-1] == popped[i] {
			tmp = tmp[:len(tmp)-1]
			i ++
		}else{
			tmp = append(tmp, pushed[j])
			j++
		}
	}
	for len(tmp) > 0 {
		if tmp[len(tmp)-1] != popped[i]{
			return false
		}
		i++
		tmp = tmp[:len(tmp)-1]
	}
	return true
}
  • 测试代码
package main
import (
	"fmt"
)
func main() {
	pushed := []int{1,2,3,4,5}
	//popped := []int{4,5,3,2,1}
	popped := []int{4,3,5,1,2}

	fmt.Println( validateStackSequences(pushed, popped) )
}

func validateStackSequences(pushed []int, popped []int) bool {
	tmp, i, j := make([]int,0), 0, 0
	for j < len(pushed){
		if pushed[j] == popped[i] {
			i ++
			j ++
		}else if len(tmp) > 0 && tmp[len(tmp)-1] == popped[i] {
			tmp = tmp[:len(tmp)-1]
			i ++
		}else{
			tmp = append(tmp, pushed[j])
			j++
		}
	}
	for len(tmp) > 0 {
		if tmp[len(tmp)-1] != popped[i]{
			return false
		}
		i++
		tmp = tmp[:len(tmp)-1]
	}
	return true
}
保姆级教程:在Ubuntu 22.04上用Conda搞定nuPlan数据集环境(Python 3.9 + PyTorch) 本文提供了一份详细的Ubuntu 22.04环境下使用Conda配置nuPlan自动驾驶数据集的保姆级教程,涵盖Python 3.9安装、Conda环境管理、PyTorch配置及数据集可视化验证等关键步骤,帮助开发者高效搭建开发环境。 阅读详情

相关推荐

Kisssoft软件在行星齿轮设计上的初试

行星齿轮传动与链传动相比较,具有质量小,体积小,承载能力强,传动比大,传动效率高等优点,但在行星齿轮传动种种优点下,不可避免的带来一些缺点,对其材料的要求过高,在追求传动比大而体积小的同时,其传动结构大大的复杂化,以及在制造和安装过程中较困难,对于行星齿轮传动设计来说,不仅应该了解其优点,而且应该在设计中,充分发挥其优点,且把其缺点降低到最低的限度。从而才能设计出性能优良的行星齿轮传动装置,为我们赛车提供更加强大的动力保证。 Kisssoft软件为我们行星齿轮传动设计提供了一体化方案,从设...

m0_69808569的博客 1万+

【数据结构连载一栈】【顺序存储栈】golang

package main import "fmt" type ListStack struct { top int stack []interface{} length int maxSize int } func NewListStack(maxSize int) ListStack { return ListStack{ top: -1, stack: make([]interface{}, maxSize), length: 0, maxSi

hbk5241的博客 191

通达信指标加密DLL加密解密三个公式源码准确率90%以上超级指标精准买卖绝世指标

通达信指标加密DLL加密解密三个公式源码准确率90%以上超级指标精准买卖绝世指标 1 超级指标 指标公式:买卖提示非常明显(适合通达信) 指标源码如下: M:3 100 60 N 3 100 30 散户线: 100*(HHV(HIGH,M)-CLOSE)/(HHV(HIGH,M)-LLV(LOW,M));RSV:=(CLOSE-LLV(LOW,N))/(HHV(HIGH,N)-LLV(LOW,N))*100; K:=SMA(RSV,5,1); D:=SMA(K,3,1); J:=3*K-2*D;主力

m0_60244077的博客 3万+

golang--算法--栈&队列&递归

关于栈、队列和递归的几个必知必会的代码实现 栈 用数组实现一个顺序栈 用链表实现一个链式栈 编程模拟实现一个浏览器的前进、后退功能 队列 用数组实现一个顺序队列 用链表实现一个链式队列 实现一个循环队列 递归 编程实现斐波那契数列求值 f(n)=f(n-1)+f(n-2) 编程实现求阶乘 n! 编程实现一组数据集合的全排列 1. 用数组实现一个顺序栈代码: package ...

天天water的专栏 4414

VIVADO中的IP核在MATLAB中仿真

VIVADO中的IP核在MATLAB中仿真项目简述VIVADO建立FFT IP核MATLAB调用FFT IP核 项目简述 我们都会用MATLAB进行算法验证,但是经常会发现如果VIVADO中调用了IP核,那么最终会发现VIVADO与MATLAB之间的数据不可以统一的对应起来。那么,MATLAB验证的效果就会大大下降,那么可不可以想办法将VIVADO中的IP核封装成一个函数在MATLAB中调用呢?答案是可以的。这篇博客主要以FFT的IP核为例讲解封装成一个函数并且成功在MATLAB中调用。 本次实验所使用的软

zhangningning1996的博客 6992

Nvivo12新手避坑指南:从安装到编码的完整流程(附实战案例)

本文为Nvivo12新手提供了从软件安装、初始设置到数据导入和编码分析的完整避坑指南。通过一个“校园欺凌现象的学生访谈研究”实战案例,详细拆解了处理中文文本、创建项目结构、执行手动编码及高级查询等关键步骤,帮助研究者避开常见错误,快速上手并高效完成质性数据分析。

resnet7explorer的博客 317

golang顺序栈实现

package main import ( "fmt" ) type arraystack struct { items []string//切片 count int //栈中元素个数 n int //栈的大小 } //初始化 func (this *arraystack) arraystack(n int){ this.n=n this.count=0 } //入栈 func (this *arraystack) push(item string){ .

qq_41450275的博客 352

通达信大单资金实时监控与播报插件:股票分析的实用利器——大红球

本文介绍了一款专为通达信软件设计的大单资金实时监控与播报插件,该插件以其傻瓜式操作和入门级特性在股民中广受欢迎。插件核心功能包括与通达信版面的无缝联动、大单金额范围的自定义设置、资金流动的可视化展示以及智能声音播报等。其技术架构基于本地网页形式,自带分时图显示功能,数据实时更新且无需L2账户,承诺永久免费升级。插件通过红绿球的大小和颜色直观展示资金规模与买卖方向,顶端全局统计功能提供宏观资金流动分析。尽管插件数据具有较高参考价值,但投资者仍需结合其他因素进行综合判断。插件界面可自适应调整,提供个性化使用体验

guleba的博客 6596

golang 实现数据结构-顺序栈

package main import "fmt" //逻辑结构: 只允许在栈顶进行插入和删除的线性表 type Stack struct { top int //栈顶指针 data []interface{} //数据元素 } //初始化 func (s *Stack) InitList(maxSize int) { s.data = make([]interface{}, maxSize) s.top = -1 } // 判空 func (s Sta

SunnWang的博客 229

angular中访问本地json文件

先在assets文件夹下写一个json文件,这样在打完包之后也可以手动修改json文件内容 1、在需要访问本地json文件的ts文件里面引入 import{HttpClient}from'@angular/common/http'; 2、用ajax请求调用,我这里是用已经封装好的ajax请求调用 gethttp = ()=>{ var self = this self.ajax.getAjax("../../assets/server.json","g...

蜗牛~~ 1830

《RT-DETR魔术师》专栏介绍 & 优快云独家改进创新实战 & 专栏目录

通过本专栏的阅读,后续你也可以自己魔改网络,在网络不同位置(Backbone、head、neck、loss等)进行魔改,实现创新!!!

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 7368

PHP/Golang实现—数据结构之顺序栈

客官,留下你的赞;成为我的粉丝,一起上车哦!评论区欢迎你的留言 重温数据结构。相关代码集放在GitHub上,欢迎Star、Fork和一起加入。目前只有PHP版本;后续会增加Golang版本,后续会不断更新,欢迎指正。 代码示例 /** * 顺序栈 * 用数组模拟栈的入栈以及出栈 * @author new2014kb */ class Stack { /** * [$top 指向栈顶,空栈=-1] * @var integer */ public $top = -1; /**

new1024kb 238

适航文章汇总:知识体系全面梳理

无论您是行业新手还是经验丰富的专业人士,都可以通过本篇文章快速查找相关资料,提高对适航认证、机载系统、软件及硬件等领域的理解。本部分详细解析ARP 4754A、ARP 4761、DO-178C、DO-254等核心标准,并介绍其在机载系统开发中的应用。介绍FAA、EASA、CCAR等主要航空管理机构的适航规章体系,并说明各类飞行器(如固定翼、旋翼机、无人机等)的适航要求。本部分还探讨硬件设计、验证与确认过程中的挑战。从系统架构设计到机载设备的集成与管理,本部分介绍机载系统的研发体系及适航管理的最佳实践。

qq_41854911的博客 1451

【Golang】LeetCode-剑指Offer-面试题31-栈的压入、弹出序列

题目 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。(假设压入栈的所有数字均不相等) 例如,序列 {1,2,3,4,5} 是某栈的压栈序列,序列 {4,5,3,2,1} 是该压栈序列对应的一个弹出序列,但 {4,3,5,1,2} 就不可能是该压栈序列的弹出序列。 示例 1: 输入:pushed = [1,2,3,4,5], popped = [4,5,3...

士多啤梨先生の博客 357

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

LeetCode 剑指 Offer 31. 栈的压入、弹出序列- Go 实现

剑指 Offer 31. 栈的压入、弹出序列 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如,序列 {1,2,3,4,5} 是某栈的压栈序列,序列 {4,5,3,2,1} 是该压栈序列对应的一个弹出序列,但 {4,3,5,1,2} 就不可能是该压栈序列的弹出序列。 示例 1: 输入:pushed = [1,2,3,4,5], popped = [4,5,3,2,1] 输出:true 解释:我们可以按以下顺序执行: push(1), pu

王小明的专栏 385

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

剑指offer 31. 栈的压入、弹出序列/leetcode 946. 验证栈序列 golang实现

描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如,序列 {1,2,3,4,5} 是某栈的压栈序列,序列 {4,5,3,2,1} 是该压栈序列对应的一个弹出序列,但 {4,3,5,1,2} 就不可能是该压栈序列的弹出序列。 示例 1: 输入:pushed = [1,2,3,4,5], popped = [4,5,3,2,...

tzh_linux的专栏 394

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

【LeetCode】剑指 Offer 31. 栈的压入、弹出序列 - Go语言题解

文章目录一、题目描述二、我的题解三、一个大佬的思路 一、题目描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如,序列 {1,2,3,4,5} 是某栈的压栈序列,序列 {4,5,3,2,1} 是该压栈序列对应的一个弹出序列,但 {4,3,5,1,2} 就不可能是该压栈序列的弹出序列。 示例 1: 输入:pushed = [1,2,3,4,5], popped = [4,5,3,2,1] 输出:true 解释:我们可以按以下顺序执行:

weixin_44211968的博客 345

LCOF剑指offer--面试题31. 栈的压入、弹出序列

输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如,序列 {1,2,3,4,5} 是某栈的压栈序列,序列 {4,5,3,2,1} 是该压栈序列对应的一个弹出序列,但 {4,3,5,1,2} 就不可能是该压栈序列的弹出序列。 示例 1: 输入:pushed = [1,2,3,4,5], popped = [4,5,3,2,1] 输出:true 解释:我们可以按以下顺序执行: push(1), push(2), push(3), push(4

qq_30182357的博客 204

剑指offer面试题31:栈的压入、弹出序列(golang实现)

题目描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如,序列 {1,2,3,4,5} 是某栈的压栈序列,序列 {4,5,3,2,1} 是该压栈序列对应的一个弹出序列,但 {4,3,5,1,2} 就不可能是该压栈序列的弹出序列。 示例1 输入:pushed = [1,2,3,4,5], popped = [4,5,3,2,1] 输出:true 解释:我们可以按以下顺序执行: push(1), push(2), push(3), push

weixin_45693198的博客 192

用 Go 剑指 Offer 31. 栈的压入、弹出序列 (辅助栈)

输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如,序列 {1,2,3,4,5} 是某栈的压栈序列,序列 {4,5,3,2,1} 是该压栈序列对应的一个弹出序列,但 {4,3,5,1,2} 就不可能是该压栈序列的弹出序列。 示例 1: 输入:pushed = [1,2,3,4,5], popped = [4,5,3,2,1] 输...

Mercury_cc的博客 221

剑指offer31判断一个栈是否是另一个栈的弹出序列

题目描述:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序 列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5 是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但 4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等 的) 思路:用栈来压入弹出元素,相等则出栈。 package Function; //:...

xiaorui的博客 195

剑指 Offer 31. 栈的压入、弹出序列

这道题问的就是第二个序列有没有可能是第一个序列的压栈出栈的玩法。这里直接模拟一个栈把pushed的元素一个个压进去,再拿一个指针从头指向popped序列。

weixin_60208935的博客 241

找工作必做事项-剑指offer

自从上次重新学习了一下算法后,写了一篇总结的文章: 算法总结,写完之后总想去检验一下自己的水平如何。 记得毕业前找工作的时候,用C++刷了一遍剑指offer,都写在网易博客上http://wuhenpzq.blog.163.com/blog, 如今再看,网易博客已经关闭了,好在自己还能查看。当时刷题,更偏向于背题,不是基于对算法有足够的理解而解题的。 所以这次打算用Go再刷一遍剑指offer,看看自己是否真的提升了,同时也好比较一下C++和Go写算法题的区别。 刷完之后,发现对于大部分题,先确定使用哪种算法

699

《剑指offer》 相应 在线测试地址

《剑指Offer》面试题集收录汇总 面试题1 赋值运算符函数 不适合在线模式 面试题2 实现Singleton模式 不适合在线模式 面试题3 二维数组中的查找 已收录 面试题4 替换空格 已收录 面试题5 从头到尾打印链表 已收录 ...

weixin_30367169的博客 92

大数据开发类岗位算法&编程题准备

看刷题群同学的讨论,刷题多少和面试效果做如下总结。是指能在白板写出代码,经典题目至少刷过2遍1000+:面试几乎是小case,如乱军丛中取敌将首级500~600:能通过绝大多数面试的手撕代码环节300~400:能通过绝大多数中等难度的算法题200~300:能通过绝大多数中等难度原题或轻微变种题 (至少要达到这个环节再面试)200以下:比较看缘分了。

一只皮皮熊 1553

Go语言 大话数据结构——栈的顺序存储结构

栈的特点 栈是一种受限的线性表,它规定只能够在表的尾部进行插入和删除,我们把允许插入和删除元素的一端称为栈顶,而另一段称为栈底,没有任何元素的元素栈称为空栈。 栈中的元素进出的规则为先入后出,即先进入栈的元素后出栈而后进入栈的元素先出栈。在对栈栈中的元素进行操作时只能够操作栈顶的元素。 栈中储存元素的三种状态: 当储存的元素超过了栈的储存空间则会发生栈中元素的溢出。 向栈中插入元素叫做...

weixin_42117918的博客 534
上一篇: 剑指 Offer 29. 顺时针打印矩阵(golang版)
下一篇: 剑指 Offer 32 - I. 从上到下打印二叉树(golang版)
l_mofi
博客等级 码龄9年 7粉丝 78原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值