【100题】给定入栈序列,判断一个序列是否可能为输出序列
#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,2…n得到的输出序列为p1p2…pn(它是输入序列的一个排列),证明在输出序列中不可能出现这样的情形:存在着i<j<k,使pj<pk<pi
这个题困扰我很久了,网上两种解析都不太看得懂,所以就自己好好思考了一下,写在这里下次忘了再来看. 这个题最难的感觉还是区分i j k和pi pj pk,很容易搞混.pi pj pk只是代表输出顺序,与 ...
- 给定入栈序列,判断一个串是否为出栈序列
剑指offer22:给定入栈序列,判断一个串是否为出栈序列 public static boolean isOutStackSequence(int[] Spush, int[] Spop) {if ...
- 给定入栈序列,判断出栈序列是否合法
题目:分别给定入栈序列和出栈序列,然后判断出栈序列是否合法.如入栈序列是[1,3,2,4,5],出栈序列[3,1,2,4,5]是合法的,[3,1,5,2,4]是不合法的. 思路: 判断出栈序列是否合法 ...
- 根据入栈顺序判断出栈顺序的合法性
这道题不管是面试还是笔试的选择题都非常爱出的一道题 题目描述: 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4 ...
- 根据入栈顺序判断出栈顺序是否合理
def is_pop_order(push, pop):"""根据入栈顺序判断出栈顺序是否合理:param push: 入栈顺序:param pop: 出栈顺序:retu ...
- 程序员面试题精选100题(24)-栈的push、pop序列[数据结构]
题目:输入两个整数序列.其中一个序列表示栈的 push 顺序,判断另一个序列有没有可能是对应的 pop 顺序.为了简单起见,我们假设 push 序列的任意两个整数都是不相等的. 比如输入的push序列 ...
- 面试高频算法题补充系列:如何判断一个点是否在三角形内?
前言 了解更多常考高频算法题可以关注 公众号:一个搬砖的胖子 企业面试题库:https://codetop.cc/ 小程序:CodeTop 该题曾出现在字节跳动.腾讯.网易.美团.小马智行等公司的面试 ...
- 程序员面试题精选100题(39)-颠倒栈[数据结构]
题目:用递归颠倒一个栈.例如输入栈{1, 2, 3, 4, 5},1在栈顶.颠倒之后的栈为{5, 4, 3, 2, 1},5处在栈顶. 分析:乍一看到这道题目,第一反应是把栈里的所有元素逐一pop出来 ...
- python小程序100题-Python 练习册,每天一个小程序 -- 0000题
python入门后需要不断的练习才能加深印象,为了提升自己的python编码能力,特地找了一些python小例子进行练习,这个是原文地址:https://github.com/Yixiaohan/sh ...
最新文章
- kubernetes Helm
- Google把AI芯片装进IoT设备,与国内造芯势力何干?
- Solr调优参考-续
- 【数据集】自动驾驶都有什么测试基准?
- WEB前端学习笔记01利用纯CSS书写二级水平导航菜单
- C/C++基础知识点(二)
- 编译FileMon出错
- Airbnb React/JSX 编码规范
- 客户关系管理系统-帮管客CRM客户管理系统 v3.0.1
- 刷新所有视图存储过程
- nuxt generate 报错 window is not defined
- CP2102 USB转串口驱动下载
- 深入浅出推荐系统(四):召回:向量化的潮流
- 关于机器人方面的sci论文_机器人领域国际期刊(SCI收录)
- Python MD5值破解
- HashSet的遍历和使用特点
- [SSL_CHX][2021-08-25]车厢重组
- ARM Mali-V VPU视频处理单元介绍 V61 V550 V500
- CSS和HTML基操
- MySQL基础回顾(六):数据查询语言DQL---select查询语句总结(篇一)