题目:输入两个整数序列,第一个序列表示栈的压入序列,请判断第二个序列是否为弹出序列。

思路:定义两个指针sPush和sPop分别指向两个整数序列的开头,借助一个辅助的栈,将第一个序列的数据依次压入栈中,直到压入栈中的数据和第二个栈中sPop所指向的数据相等,就将这个数据弹出栈。sPop指向下一个数字。重复上述过程。直到sPop等于序列的长度并且栈为空。

将抽象的问题具体化的过程如下:

C++代码:

#include<iostream>
#include<stack> bool isPopOrder(const int* sPush,const int* sPop,int nLength)
{
bool isPopOrder=false;
if(sPush!=NULL&&sPop!=NULL&&nLength>)
{
const int* pNextPush=sPush;
const int* pNextPop=sPop;
std::stack<int> stack;
while(pNextPop-sPop<nLength)
{
while(stack.empty()||*pNextPop!=stack.top())
{
if(pNextPush-sPush==nLength)
break;
stack.push(*pNextPush);
pNextPush++;
}
if(stack.top()!=*pNextPop)
break;
stack.pop();
pNextPop++; }
if(stack.empty()&&pNextPop-sPop==nLength)
isPopOrder=true;
}
return isPopOrder;
}
void test(const int* a,const int * b)
{
if(isPopOrder(a,b,))
printf("b是a的弹出序列\n");
else
printf("b不是a的弹出序列\n");
}
void main()
{
int a[]={,,,,};
int b[]={,,,,};
int c[]={,,,,};
test(a,b);
test(a,c); }

Java代码:

import java.util.Stack;
public class IsPopOrder {
public boolean isPopOrder(int[] sPush,int[] sPop,int length){
boolean isPop=false;
int sNextPush=;
int sNextPop=;
Stack<Integer> stack=new Stack<Integer>();
if(sPush!=null||sPop!=null||length>){
while(sNextPop<length){
while(stack.empty()||stack.peek()!=sPop[sNextPop])
{
if(sNextPush==length)
break;
stack.push(sPush[sNextPush]);
sNextPush++;
}
if((int)stack.peek()!=sPop[sNextPop])
break;
stack.pop();
sNextPop++;
}
if(stack.isEmpty()&&sNextPop==length){
isPop=true;
}
}
return isPop;
}
public static void main(String[] args)
{
int[] a={,,,,};
int[] b={,,,,};
int[] c={,,,,};
IsPopOrder ipo=new IsPopOrder();
if(ipo.isPopOrder(a, c, a.length))
System.out.print("true");
else
System.out.print("false");
}
}

剑指offer-第四章解决面试题的思路(栈的压入和弹出序列)的更多相关文章

  1. C++版 - 剑指offer 面试题22:栈的压入、弹出序列 题解

    剑指offer 面试题22:栈的压入.弹出序列 提交网址: http://www.nowcoder.com/practice/d77d11405cc7470d82554cb392585106?tpId ...

  2. 剑指Offer面试题:20.栈的压入、弹出序列

    一.题目:栈的压入.弹出序列 题目:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1.2.3.4.5是某栈的压栈序列,序列4 ...

  3. (剑指Offer)面试题22:栈的压入、弹出序列

    题目: 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序.假设压入栈的所有数字均不相等. 例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序 ...

  4. 【剑指offer 面试题22】栈的压入、弹出序列

    思路: 不停地压栈,直到栈头元素与弹出序列的首元素相等则出栈,同时弹出序列后移:若不相等则一直保持压栈,直到压入所有元素后弹出序列仍不为空,则说明无法匹配. C++: #include <ios ...

  5. 【剑指offer】面试题22:栈的压入、弹出序列

    题目: 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列 ...

  6. 【剑指Offer学习】【面试题22:栈的压入、弹出序列】

    题目:输入两个整数序列,第一个序列表示栈的压入顺序,请推断二个序列是否为该栈的弹出顺序.假设压入栈的全部数字均不相等. 解题思路: 解决问题非常直观的想法就是建立一个辅助栈.把输入的第一个序列中的数字 ...

  7. 剑指Offer - 九度1366 - 栈的压入、弹出序列

    剑指Offer - 九度1366 - 栈的压入.弹出序列2014-02-05 20:41 题目描述: 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序.假设压入栈的所 ...

  8. 剑指Offer:栈的压入、弹出序列【31】

    剑指Offer:栈的压入.弹出序列[31] 题目描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4,5是某栈 ...

  9. 剑指Offer(二十一):栈的压入、弹出序列

    剑指Offer(二十一):栈的压入.弹出序列 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法.机器学习干货 csdn:https://blog.csdn.net/b ...

  10. 剑指 Offer 31. 栈的压入、弹出序列 + 入栈顺序和出栈顺序的匹配问题

    剑指 Offer 31. 栈的压入.弹出序列 Offer_31 题目详情: 解析: 这里需要使用一个栈来模仿入栈操作. package com.walegarrett.offer; /** * @Au ...

随机推荐

  1. article嵌套

    例如: 为了将每一个部分都突出显示,可以将article添加边框和颜色的属性: <style> article{ border: 1px solid #ff0000; margin: 5p ...

  2. [pixhawk笔记]4-如何写一个简单的应用程序

    本文主要内容来自于:https://dev.px4.io/en/tutorials/tutorial_hello_sky.html,并对文档中的部分问题进行更正. 本文假设已经建立好开发环境并能正确编 ...

  3. jQuery图片分组切换焦点图

    在线演示 本地下载

  4. C++二阶构造函数

    转自:http://blog.51cto.com/9291927/1896411 一.构造函数的问题 构造函数存在问题: A.构造函数只提供自动初始化成员变量的机会 B.不能保证初始化逻辑一定成功,如 ...

  5. ElasticSearch高可用集群环境搭建和分片原理

    1.ES是如何实现分布式高并发全文检索 2.简单介绍ES分片Shards分片技术 3.为什么ES主分片对应的备分片不在同一台节点存放 4.索引的主分片定义好后为什么不能做修改 5.ES如何实现高可用容 ...

  6. Windows7中pagefil.sys和Hiberfil.sys文件删除与转移

    第一步.在开始的功能表的搜索栏里输入 cmd,然后在搜索结果中的 cmd 按下右键,点选[以系统管理员身分运行] 第二步.在命令提示符窗口里输入下面命令然后按下Enter: powercfg –h o ...

  7. C# word 类库基本属性介绍

    using System;using System.Collections.Generic;using System.Text;using Microsoft.Office.Interop.Word; ...

  8. 利用正则提取discuz的正文内容

    源正文: [p=24, null, left][color=#000][font=宋体]近日,香港著名漫画家马荣成在香港举办的"[color=#ff660][url=http://cul.c ...

  9. mysql——主键自动增长&唯一索引

    首先说一下主键和唯一索引的区别 主键:一个数据库的一张表有且仅有一个主键,而且主键不能重复 唯一索引:一个数据库的一张表上唯一索引可以有多个,只是所在唯一索引上的值不能重复,这一点和主键一样 下面我们 ...

  10. codeforces 816B.Karen and Coffee 解题报告

    题目链接:http://codeforces.com/contest/816/problem/B 题目意思:给出 n 个recipes,第 i 个(1<= i <=n)recipes 表明 ...