栈 ~ 思维题

程序员必备75道逻辑思维题(附答案)终章 感觉这一天天的,上班是真的混,没有一个比你厉害的带你,都靠自己学习,你觉得这样的公司可以一直待下去吗???!!! 还是多学习算法,思维,到时候去面试薪资翻倍不是梦啊! 【61】你有两个罐子,50个红色弹球,50个蓝色弹球,随机选出一个罐子,随机选取出一个弹球放入罐子,怎么给红色弹球最大的选中机会?在你的计划中,得到红球的准确几率是多少? 答案: 一个罐子放一个红球,另一个罐子放49个红球和50个... 阅读详情

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

思路

解决这个问题很直观的想法就是建立一个辅助栈,把输入的第一个序列中的数字依次压入辅助栈,并按着第二个序列的顺序依次从该栈中弹出数字。

以弹出{序列4,5,3,2,1}为例分析压入栈和弹出的过程。第一个希望被弹出的数字是4.,因此4需要先压入辅助栈,压入栈的顺序由压栈序确定,也就是把4压入栈之前,数字1,2,3都需要压入栈,此时栈中包含数字4.分别是1,2,3,4.其中4位于栈顶,把4弹出栈后,剩下的 数字3位于栈顶,接下来希望被弹出的5,由于它不是栈顶元素,因此我们接着在第一个序列中把4以后的数字压入辅助栈,直到压入数字5,这个时候5位于栈顶,就可以被弹出来了。接下来希望被弹出的是3,2,1.由于每次操作前他们都位于栈顶,因此直接弹出即可。

接下来再分析弹出序列{4,3,5,1,2}。第一个希望被弹出的是4和前面的情况一样。把4弹出之后,3位于栈顶,可以直接弹出,接下来希望被弹出的是5,由于它不是栈顶元素,因此我们接着在第一个序列中把4以后的数字压入辅助栈,直到压入数字5,这个时候5位于栈顶,就可以被弹出来了。此时栈中有两个数字1 ,2,其中2位于栈顶,由于接下来希望被弹出的 数字是1,我们需要从压栈序列中尚未压栈的数字中去搜素这个数字。但是此时所有压栈序列中的数字都已经压栈了,所以该弹出序列不是{1,2,3,4,5}对应的弹出序列。

总结
综上所诉,我们可以找到一个判断一个序列是不是栈的弹出序列的规律:如果下一个弹出数字刚好是栈顶数字,那么直接弹出,如果不是,则把尚未压栈的数字压入辅助栈,直到把下一个弹出的数字压入栈顶为止,如果所有数字都压入后仍然没有找到下一个弹出数字,那么该序列不可能是一个弹出序列。

形成了思路之后,下面附上代码~

bool IsPopOrder(const int* pPush, const int* pPop, int nLength) 
{
    bool bOrderFlag = false;
    if (NULL != pPush && NULL != pPop && nLength > 0) {
        const int* pNextPush = pPush;
        const int* pNextPop = pPop;
        std::stack<int> pStack;
        while (pNextPop - pPop < nLength) {//直到弹出序列为空
            while (pStack.empty() || pStack.top() != *pNextPush) {//直到压入栈的数字等于需要弹出的数字
                if (pNextPush - pPush == nLength) {//全部压栈
                    break;
                }
                pStack.push(*pNextPush);
                pNextPush++;
            }
            if (pStack.top() != *pNextPush) {// 匹配失败
                break;
            }
            pStack.pop();
            pNextPop++;
        }
        if (pStack.empty() && pNextPop - pPop == nLength) {//全部匹配成功
             bOrderFlag = true;
        } 
    }
    return bOrderFlag;
}

以上,欢迎留言交流~

真的神了~无意中发现1500道的2021LeetCode算法刷题pdf笔记 昨晚逛GitHub,无意中看到一位大佬的算法刷题笔记,感觉发现了宝藏!有些小伙伴可能已经发现了,但咱这里还是忍不住安利一波,怕有些小伙伴没有看到。 关于算法刷题的困惑和疑问也经常听朋友们提及。这份笔记里面共包含作者刷力扣算法题后整理的上千道题,每道题均附有详细题解过程。有了这个笔记的总结,对校招和社招的算法刷题帮助之大不言而喻,果断收藏安利。 累计1500+道...拿来即刷!word很大,你忍一下,我就不一一截图了,诸君自行下载哈。 可以看到,每道题的原题,题目大意,解题思路,以及代码实现都非常 阅读详情

相关推荐

保姆级教程:手把手配置AutoSar诊断复位(Dcm 0x11服务联动BswM/EcuM)

本文提供AutoSar诊断复位(Dcm 0x11服务联动BswM/EcuM)的保姆级配置教程,详细讲解从诊断服务基础配置到BswM规则引擎搭建、服务端口映射及EcuM复位执行的完整流程。通过Vector配置工具的实际截图和代码片段,帮助开发者高效实现远程复位功能,并分享调试技巧与性能优化实践。

weixin_30756499的博客 543

线性表基础:栈(一)基础结构、栈思维、经典实现、典型应用场景

一、基础知识 1.1 基础结构 栈是⼀种“先进后出”(FILO, First In Last Out)的数据结构。 1.2 栈适合解决什么问题?栈思维,很重要 判断括号是否合法: 一种括号情况: 第一个条件解释: 一个变量就可以了,记录左右括号的差值即可 引出思维方式: [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-p64RNJ8T-1617202866953)(./1616298789564.png)] +1代表多了一个“东西”,-1代表少了一个“东西” ( 代表出

语雀同名:犬豪 yuque.com/qhao 446

Jetson AGX Orin 新手避坑:解决‘找不到nvidia-jetpack包’的完整修复指南

本文详细介绍了Jetson AGX Orin设备在安装JetPack开发套件时遇到的'nvidia-jetpack包缺失'问题的完整解决方案。通过分析问题根源、提供分步修复指南以及系统优化建议,帮助开发者快速解决这一常见问题,充分发挥Jetson AGX Orin的边缘计算性能。

weixin_42520909的博客 460

栈的思维题

题目: Click GO!!! 输入n,代表将会把1~n 随意的压入栈中,add代表入栈一个数,remove代表出栈一个数,严格按照1,2,3,4。。。。的顺序出栈。如果不能按顺序则需要一次排序,问需要排序多少次? 思路: 当我们经过一次排序后,其实后面的数都为有序的,并不影响后面的。也就是说后面是否需要排序不受已经排序过的数影响。 要点: 每次排序后直接清空 ...

m0_46260869的博客 166

常见的AXI总线仲裁器概述-AXI协议理解(一)

SoC 设计广泛采用共享总线式的片上通信,其中的仲裁器是共享总线的关键技术之一。AMBA AXI 总线协议以高性能、高频率的系统设计为目标,适合高带宽、低延迟的系统设计,可以达到高频率的操作而不需要复杂的总线桥,满足众多部件的接口要求,具备高度灵活的互联结构,并且向后兼容 AHB 和 APB 接口。

Paul 安的博客 1万+

说一下Intel Fortran 编译器经典版ifort和新一代ifx

摘要:ifort是Intel开发的传统Fortran编译器,以稳定性和遗留代码兼容性著称,现已进入维护模式。ifx则是基于LLVM架构的新一代Fortran编译器,具有更好的性能优化、更快的编译速度,并支持最新Fortran标准和GPU加速。英特尔计划逐步用ifx取代ifort,前者将成为未来主力发展的产品线。两者的核心区别在于技术基础(传统vs.现代化LLVM)和功能支持(维护状态vs.持续更新)。

luohaitao的专栏 1347

巧妙用栈的思想解题

巧妙用栈的思想解题标签:C语言 栈 数组by 小威威这里我们就通过实例来了解如何运用栈的思想(不是用栈解题噢,是用栈的思想)实例:N couples are standing in a circle, numbered consecutively clockwise from 1 to 2N. Husband and wife do not always stand together. We rem

linwh8的博客 1632

手把手教你用内核远程call实现64位进程注入(附完整ShellCode示例)

本文深入探讨了在Windows 64位环境下,通过内核态直接操作线程TrapFrame结构实现进程注入的高级技术。文章提供了从驱动框架设计、用户态-内核态通信,到定位修改TrapFrame、编写Shellcode及执行环境恢复的完整实战指南,并附有详细的代码示例,为安全研究人员和开发者提供了绕过用户态检测、实现底层远程代码执行的新思路。

weixin_28396629的博客 344

栈(例题详解,栈的思想,栈的基本功能)

#include&lt;stdio.h&gt; #include&lt;stdlib.h&gt; struct stack { int buf[6]; int top;//指向栈顶元素 }; short IsFull(struct stack* pa); void initStack(struct stack* ps); short push(struct s...

平行世界 1306

34、Text2KGBench与GeoQuestions1089:知识图谱生成与地理空间问答的新进展

本文介绍了Text2KGBench和GeoQuestions1089在知识图谱生成与地理空间问答领域的最新进展。Text2KGBench提供了一个开放且可复现的基准,用于从文本生成知识图谱,并结合多个LLM模型和评估工具推动研究。GeoQuestions1089是目前最大的地理空间问答数据集,与GeoQA2系统结合,推动了地理空间问答系统的发展。文章还探讨了技术挑战和未来研究方向,包括多模态知识图谱生成和深度学习优化的地理空间问答系统。

css33的专栏 114

诊断CAPL自动化(5) ——没有CANdela,无法编辑cdd数据库文件,也能轻松完成诊断测试

🍅我们知道cdd数据库文件,是CANoe测试环境的重要组件,它可以让我们更加轻松的完成诊断测试工作;但是创建和编辑cdd文件是需要CANdela 来完成的,一个 liscense 就要将近二十万,成本确实高🍅特别是在处理22/2E/31服务的时候,频繁的增加功能,可能需要频繁的用CANdela 修改CDD,我测试开发过程中,一般很少去修改cdd,有这个时间,纯手撸也开发完了,就一个CANdela,鬼知道此时此刻到了谁手里,我也懒得去找。🍅演示软硬件环境;目录📘前言。

蚂蚁小兵 5756

对于栈的基本理解

对于栈的基本理解 目录 一.栈顶的设置 二.栈操作操作字节数问题 三.栈的越界问题 一. 在设置一个栈的时候,有以下几个步骤: 1.将栈指针SS:IP设置好; 2.初始化栈。 其中值得注意的是: (1)SS:SP设置的栈顶地址,也就是高位地址。而不是传统思维的低位。 在进行push操作的时候,SP-2 指针向上移动两个内存单元,也就是两个字节,一个字。 二.栈的操作字节数问题 为什么PUSH操作...

weixin_43651292的博客 1028

AI技术在电商中的实际应用

人工智能、电商、推荐系统、个性化、机器学习、深度学习 1. 背景介绍 电子商务行业近年来发展迅速,用户数量不断增长,商品种类日益丰富。然而,随着市场竞争的加剧,电商平台面临着如何提升用户体验、提高转化率、挖掘潜在商机等一系列挑战。人工智能(AI)技术作为一种新兴技术,凭借其强大的数

AGI×大数据,开启智能时代的认知跃迁;解码AGI,赋能数据驱动的智能革命。 1740

「JS刷题之路-栈」和我一起系统的刷题吧(内附思维导图)

JS刷题之路-栈 最近一直在刷题,所以鸽了,这不我快马加鞭赶出了栈相关的JS题;题不在多,掌握了思维就会发现万变不离其宗(其实我觉着和刷数学题是差不多的感觉哈哈) 文章目录JS刷题之路-栈思维导图LeetCode-栈一、20.有效的括号题目描述解题思路二、946. 验证栈序列题目描述解题思路三、921.使括号有效的最少添加题目描述解题思路前置知识(四五题的)首先什么是单调栈如何使用单调栈什么题适合用单调栈来做呢?四、901. 股票价格跨度题目描述解题思路五、739. 每日温度题目描述解题思路六、907.

qq_41147507的博客 903

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

倒序思维~ (增删都在头部)一种 栈 思维

/ 通过栈(后进先出(pop掉 后面 第N个,从而可以拿到待删除结点的前一个结点))~ 倒序思维~ 联想到数据结构栈。//从叶子到根的遍历(层序遍历)~ 思路:倒序:只需要不断插入第一个位置。倒序思维~ (增删都在头部)一种 栈 思维。//19_删除链表的倒数第N个结点。

Coder-coco的博客 48

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

CodeForces 数学、思维题、图论、刷题记录、题单等

CodeForces 数学、思维题、图论、刷题记录、题单等

青少年趣味编程 4000

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

刷题中的逆向思维~

刷题必备的逆向思维~~~

weixin_62113243的博客 470

Leetcode刷题修炼手册

我的机器学习教程「美团」算法工程师带你入门机器学习 已经开始更新了,欢迎大家订阅~ 任何关于算法、编程、AI行业知识或博客内容的问题,可以随时扫码关注公众号「图灵的猫」,加入”学习小组“,沙雕博主在线答疑~此外,公众号内还有更多AI、算法、编程和大数据知识分享,以及免费的SSR节点和学习资料。其他平台(知乎/B站)也是同名「图灵的猫」,不要迷路哦~ “跟着...

Machine Learning with Tutors 5万+

GitHub:算法模板,最科学的刷题方式,最快速的刷题路径,你值得拥有~

算法模板,最科学的刷题方式,最快速的刷题路径,一个月从入门到 offer,你值得拥有~ 算法模板顾名思义就是刷题的套路模板,掌握了刷题模板之后,刷题也变得好玩起来了~ 此项目是自己找工作时,从 0 开始刷 LeetCode 的心得记录,通过各种刷题文章、专栏、视频等总结了一套自己的刷题模板,仅供参考。 心得体会 文章大部分是对题目的思路介绍,和一些问题的解析,有了思路还是需要自己手动写写的,所以每篇文章最后都有对应的练习题 刷完这些练习题,基本对数据结构和算法有自己的认识体会,基本大部分面试题都能写得

追心 1630

信息学竞赛 - 如何提高思维思维能力?

信息学竞赛如何提高“”解决思维题“”的水平? RT,高二蒟蒻一枚,学了不少的算法和数据结构了,高一拿到了NOIP一等但是分数不高。 现在做题感觉是要么一眼秒出套路,要么就是即使想到了与什么算法有关也找不到突破口,由此,做题看过去要么是已经知道套路不想打的题,要么就是不看题解打不出来的题。 是我的水平已经到达瓶颈了吗?我应该怎样争取进步呢? rsa 喜爱研究,但没啥成果 62 人赞同了该回答 多刷...

Brian_Pan_的博客 1349

【Codeforces】思维题做题记录

题意:解题思路:最大化相邻两个数之间的差值,从n开始减差值ax-ay=1,2,3.... (注意到最后如果不能让差值一直增加(因为要构造的数是1~n),如果不能增加了就固定为1)

2301_79896098的博客 1795
上一篇: 多线程基础架构 C++实现
下一篇: 类模板的使用~
breakpoints_
博客等级 码龄9年 52粉丝 28原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

打赏作者

breakpoints_

你的鼓励是我最大的动力

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

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

打赏作者

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

抵扣说明:

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

余额充值