zoukankan      html  css  js  c++  java
  • 剑指Offer 31 栈的压入、弹出序列

    栈的压入、弹出序列

    输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)

     1 # -*- coding:utf-8 -*-
     2 class Solution:
     3     def IsPopOrder(self, pushV, popV):
     4         n = len(pushV)
     5         stack = []
     6         popout = [0] * n
     7         preidx = 0
     8         for i in range(len(pushV)):
     9             cur = popV[i]
    10             if pushV.count(cur) > 0:
    11                 idx = pushV.index(cur)
    12                 if idx >= preidx:
    13                     for j in range(preidx,idx):
    14                         if popout[j] == 1:
    15                             continue
    16                         else:
    17                             stack.append(pushV[j])
    18                 else:
    19                     top = stack.pop(-1)
    20                     if top != cur:
    21                         return False
    22                 popout[idx] = 1
    23                 preidx = idx
    24             else:
    25                 return False
    26         return True
    27         # write code here
  • 相关阅读:
    sss
    sss
    maven tomcat jstl 异常
    第1章 预备知识
    第2章 存储管理
    第8章 虚拟机字节码执行引擎
    第23章 Spring MVC初体验
    第1章 预备知识
    第5章 Java中的锁
    第13章 线程安全与锁优化
  • 原文地址:https://www.cnblogs.com/asenyang/p/11013883.html
Copyright © 2011-2022 走看看