题目:输入两个整数序列。其中一个序列表示栈的push 顺序,判断另一个序列有没有可能是对应的pop 顺序。
为了简单起见,我们假设push 序列的任意两个整数都是不相等的。
比如输入的push 序列是1、2、3、4、5,那么4、5、3、2、1 就有可能是一个pop 系列,但序列4、3、5、1、2 就不可能是push 序列1、2、3、4、5 的pop 序列。

分析:

我们首先定义遍历push的序数i=0  遍历pop序列的序数 j =0

我们可以先遍历给出的push序列,并且时刻与pop序列的头元素pop[j]进行比较

若找到与pop序列的头元素相同的push元素,则j向右移一位(移动完成后需要比较pop[j] 与当前的栈顶元素是不是相等,若相等则需要退出当前栈顶元素)

若push已经遍历完成,但是j依然小于 pop的元素个数,则我们只需要继续比较pop中剩余的元素与当前栈中的元素是不是对应的即可

代码:

func judgeStackOrder(var pushArray:Array<Int>,var popArray:Array<Int>)->Bool{

var tempStack = Stack<Int>()                  //构造一个tempStack的临时栈

if(pushArray == [] || popArray == []){

return false

}

if(pushArray.count != popArray.count){

return false

}

var i = 0,j = 0

for(i; i < pushArray.count ; i++){

println(i)

if(pushArray[i] != popArray[j]){

println(pushArray[i])

tempStack.push(pushArray[i])

}

else{

tempStack.push(pushArray[i])

tempStack.pop()

if(tempStack.top() == popArray[j+1]){

tempStack.pop()

j++

}

j++

}

}

if(j < popArray.count){

while( j < popArray.count ){

if(tempStack.top() != popArray[j] ){

println(tempStack.top())

popArray[j]

return false

}

else{

tempStack.pop()

j++

continue        //若当前栈顶元素等于当前j所处的pop序列的元素,则临时栈退栈,并且使j向右移动一个单位,跳入下一轮循环

}

}

return true

}

return false

}

//测试代码

var pushArray:Array<Int> = [1,3,5,7,9,8]

var popArray:Array<Int> = [3,1,9,8,7,5]

judgeStackOrder(pushArray, popArray)

Swift处理堆栈问题——给定两组序列,其中一个序列表示栈的push 顺序,判断另一个序列有没有可能是对应的pop 顺序的更多相关文章

  1. 剑指offer二十一之栈的压入、弹出序列

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

  2. c# 请问如何将四个RadioButton分成两组?

    WinForm 只要放在同一个容器中的RadioButton 就自动互斥 创建两个panel容器,分别放两个RadioButton 就是两组了

  3. 数组中的数分为两组,让给出一个算法,使得两个组的和的差的绝对值最小,数组中的数的取值范围是0<x<100,元素个数也是大于0, 小于100 。

    比如a[]={2,4,5,6,7},得出的两组数{2,4,6}和{5,7},abs(sum(a1)-sum(a2))=0: 比如{2,5,6,10},abs(sum(2,10)-sum(5,6))=1 ...

  4. 给定两个字符串 s 和 t,它们只包含小写字母。 字符串 t 由字符串 s 随机重排,然后在随机位置添加一个字母。 请找出在 t 中被添加的字母。

    给定两个字符串 s 和 t,它们只包含小写字母.字符串 t 由字符串 s 随机重排,然后在随机位置添加一个字母.请找出在 t 中被添加的字母. 示例: 输入: s = "abcd" ...

  5. 给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组

    题目描述: 给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组. 说明:初始化 nums1 和 nums2 的元素数量分别为 m ...

  6. 给定两个数组,这两个数组是排序好的,让你求这两个数组合到一起之后第K大的数。

    题目:给定两个数组,这两个数组是排序好的,让你求这两个数组合到一起之后第K大的数. 解题思路: 首先取得数组a的中位数a[aMid],然后在b中二分查找a[aMid],得到b[bMid],b[bSt] ...

  7. Solr4:查询参数fq的用法(对结果进行过滤;两组关键词组合查询)

    Solr查询参数文档可以参考: http://wiki.apache.org/solr/CommonQueryParameters#head-6522ef80f22d0e50d2f12ec487758 ...

  8. 9.11排序与查找(一)——给定两个排序后的数组A和B,当中A的末端有足够的缓冲空间容纳B。将B合并入A并排序

    /**  * 功能:给定两个排序后的数组A和B,当中A的末端有足够的缓冲空间容纳B.将B合并入A并排序. */ /** * 问题:假设将元素插入数组A的前端,就必须将原有的元素向后移动,以腾出空间. ...

  9. [Q&A]VS 2012 MVC4专案与网站的差异?「ASP.NET组态」的Login账号出现在「新旧两组」会员数据库里面?

    原文出處  http://www.dotblogs.com.tw/mis2000lab/archive/2013/08/30/mvc4_vs2012_login_member_db.aspx [Q&a ...

随机推荐

  1. curl方法post一个数组

    $r = $this->curl_post($url, $data);$list = json_decode($r,true);   function curl_post($url = '', ...

  2. C3P0连接池在hibernate和spring中的配置

    首先为什么要使用连接池及为什么要选择C3P0连接池,这里就不多说了,目前C3P0连接池还是比较方便.比较稳定的连接池,能与spring.hibernate等开源框架进行整合. 一.hibernate中 ...

  3. iOS autoresizing布局

    在对UIView以及其子类空间的布局方案有多种,今天温习了一下autoresizing布局 一.了解一下相关知识: 1.UIView其中一个属性为 @property(nonatomic) UIVie ...

  4. iOS 为移动中的UIView(UIButton )添加点击事件

    高高兴兴迎接新的产品新需求,满心欢喜的开始工作,结果研究了一下午才发现,是自己想的太简单了,是我太单纯呀. 需求是这样的类似下雪的效果,随机产生一些小雪花,然后每个雪花可以点击到下个页面. 接到需求之 ...

  5. 2.4G/5G频段WLAN的模式、带宽、协商速率

    2.4G频段 5G频段

  6. 【转】RadControls for Silverlight(学习2-RadDataPager)

    引用地址:http://www.cnblogs.com/forrestsun/archive/2011/05/15/2046894.html <Grid x:Name="LayoutR ...

  7. ArrayList和Vector的区别

    3.ArrayList和Vector的区别 答: 这两个类都实现了List接口(List接口继承了Collection接口),他们都是有序集合,即存储在这两个集合中的元素的位置都是有顺序的,相当于一种 ...

  8. JSP数据交互(二)和Servlet基础

    01.Application原理与应用 01.application对象的作用域范围是整个应用服务,而它在应用中所承担的责任就类似于一个全局变量.只要服务启动,则application对象就会存在. ...

  9. 解决protobuf不能直接在IOS上使用,利用protobuf-net在IOS上通讯

    ---------------------------------------------------------------------------------------------------- ...

  10. Spark源码学习1.5——BlockManager.scala

    一.BlockResult类 该类用来表示返回的匹配的block及其相关的参数.共有三个参数: data:Iterator [Any]. readMethod: DataReadMethod.Valu ...