#include <stack>
#include <iostream>
using namespace std;
/*
假设序列中无重复数字
输入序列为: 1,2,3,4,5
测试序列:4,5,3,2,1
测试序列:4,3,5,1,2
题目拓展:
1,如果序列中有重复的元素,怎么办?
2,找出一个入栈序列中所有可能的出栈序列?
*/
bool bxy
(
const int *pPush,
const int *pPop,
int nLength
)
{
bool flag = false;
if(pPush && pPop && nLength>0)
{
const int *pNextPush = pPush;
const int *pNextPop = pPop;
stack<int> data;
while(pNextPop-pPop < nLength)
{
//当data为空,而且栈顶元素不是pop序列当前的值
//则向data中push
while(data.empty() || data.top() != *pNextPop)
{
//如果push序列为空,则跳出!
if(!pNextPush)
{
break;
}
//
data.push(*pNextPush);
if(pNextPush-pPush < nLength-1)
{
pNextPush++;
}
else
{
break;
//pNextPush = NULL;
}
}
//
if(data.top() != *pNextPop)
{
break;
}
data.pop();
pNextPop++;
}
if(data.empty() && pNextPop-pPop==nLength)
{
flag = true;
}
}
return flag;
}
int main(int argc, char **argv)
{
int push[] = {1,2,3,4,5};
int Yespop[] = {4,5,3,2,1};
int Nopop[] = {4,3,5,1,2};
cout << bxy(push,Yespop,5) <<endl;
cout << bxy(push,Nopop,5) <<endl;
return 0;
}

【100题】给定入栈序列,判断一个序列是否可能为输出序列相关推荐

  1. 数据结构:若借助栈由输入序列1,2…n得到的输出序列为p1p2…pn(它是输入序列的一个排列),证明在输出序列中不可能出现这样的情形:存在着i<j<k,使pj<pk<pi

    这个题困扰我很久了,网上两种解析都不太看得懂,所以就自己好好思考了一下,写在这里下次忘了再来看. 这个题最难的感觉还是区分i j k和pi pj pk,很容易搞混.pi pj pk只是代表输出顺序,与 ...

  2. 给定入栈序列,判断一个串是否为出栈序列

    剑指offer22:给定入栈序列,判断一个串是否为出栈序列 public static boolean isOutStackSequence(int[] Spush, int[] Spop) {if ...

  3. 给定入栈序列,判断出栈序列是否合法

    题目:分别给定入栈序列和出栈序列,然后判断出栈序列是否合法.如入栈序列是[1,3,2,4,5],出栈序列[3,1,2,4,5]是合法的,[3,1,5,2,4]是不合法的. 思路: 判断出栈序列是否合法 ...

  4. 根据入栈顺序判断出栈顺序的合法性

    这道题不管是面试还是笔试的选择题都非常爱出的一道题 题目描述: 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4 ...

  5. 根据入栈顺序判断出栈顺序是否合理

    def is_pop_order(push, pop):"""根据入栈顺序判断出栈顺序是否合理:param push: 入栈顺序:param pop: 出栈顺序:retu ...

  6. 程序员面试题精选100题(24)-栈的push、pop序列[数据结构]

    题目:输入两个整数序列.其中一个序列表示栈的 push 顺序,判断另一个序列有没有可能是对应的 pop 顺序.为了简单起见,我们假设 push 序列的任意两个整数都是不相等的. 比如输入的push序列 ...

  7. 面试高频算法题补充系列:如何判断一个点是否在三角形内?

    前言 了解更多常考高频算法题可以关注 公众号:一个搬砖的胖子 企业面试题库:https://codetop.cc/ 小程序:CodeTop 该题曾出现在字节跳动.腾讯.网易.美团.小马智行等公司的面试 ...

  8. 程序员面试题精选100题(39)-颠倒栈[数据结构]

    题目:用递归颠倒一个栈.例如输入栈{1, 2, 3, 4, 5},1在栈顶.颠倒之后的栈为{5, 4, 3, 2, 1},5处在栈顶. 分析:乍一看到这道题目,第一反应是把栈里的所有元素逐一pop出来 ...

  9. python小程序100题-Python 练习册,每天一个小程序 -- 0000题

    python入门后需要不断的练习才能加深印象,为了提升自己的python编码能力,特地找了一些python小例子进行练习,这个是原文地址:https://github.com/Yixiaohan/sh ...

最新文章

  1. kubernetes Helm
  2. Google把AI芯片装进IoT设备,与国内造芯势力何干?
  3. Solr调优参考-续
  4. 【数据集】自动驾驶都有什么测试基准?
  5. WEB前端学习笔记01利用纯CSS书写二级水平导航菜单
  6. C/C++基础知识点(二)
  7. 编译FileMon出错
  8. Airbnb React/JSX 编码规范
  9. 客户关系管理系统-帮管客CRM客户管理系统 v3.0.1
  10. 刷新所有视图存储过程
  11. nuxt generate 报错 window is not defined
  12. CP2102 USB转串口驱动下载
  13. 深入浅出推荐系统(四):召回:向量化的潮流
  14. 关于机器人方面的sci论文_机器人领域国际期刊(SCI收录)
  15. Python MD5值破解
  16. HashSet的遍历和使用特点
  17. [SSL_CHX][2021-08-25]车厢重组
  18. ARM Mali-V VPU视频处理单元介绍 V61 V550 V500
  19. CSS和HTML基操
  20. MySQL基础回顾(六):数据查询语言DQL---select查询语句总结(篇一)

热门文章

  1. 内存、外存、硬盘、磁盘、闪存,傻傻分不清?
  2. 济南电子机械工程学校计算机专业班主任,济南电子机械工程学校
  3. linux中pwd命令,pwd命令
  4. 如何学习SDN及网络自动化
  5. 适合程序员编程的笔记本电脑如何选择?
  6. ViTAE论文阅读与官方代码讲解
  7. kubelet启动pod源码分析(三)
  8. 电商基础知识:供应链产品介绍
  9. Python处理Excel求取某列固定间隔数的平均值
  10. Android插件化方式实现View动态更新