zoukankan      html  css  js  c++  java
  • 【leetcode】946. Validate Stack Sequences

    题目如下:

    Given two sequences pushed and popped with distinct values, return true if and only if this could have been the result of a sequence of push and pop operations on an initially empty stack.

    Example 1:

    Input: pushed = [1,2,3,4,5], popped = [4,5,3,2,1]
    Output: true
    Explanation: We might do the following sequence:
    push(1), push(2), push(3), push(4), pop() -> 4,
    push(5), pop() -> 5, pop() -> 3, pop() -> 2, pop() -> 1
    

    Example 2:

    Input: pushed = [1,2,3,4,5], popped = [4,3,5,1,2]
    Output: false
    Explanation: 1 cannot be popped before 2.
    

    Note:

    1. 0 <= pushed.length == popped.length <= 1000
    2. 0 <= pushed[i], popped[i] < 1000
    3. pushed is a permutation of popped.
    4. pushed and popped have distinct values.

    解题思路:栈具有后进先出的特性,从这个特性中可以得出这么一个规律:对于出栈序列中的任意一个元素来说,在这个元素之前入栈的其他元素并且在这个元素之后出栈的这些元素必定满足后进先出。以 pushed = [8,2,1,4,7,9,0,3,5,6],popped = [1,2,7,3,6,4,0,9,5,8] 为例,对于元素3来说,在其之前入栈的元素为[8,2,1,4,7,9,0],在其后出栈的元素为[6,4,0,9,5,8] ,同时满足先于3入栈后于3出栈的元素为[8,4,9,0],这些元素出栈的顺序必定要满足[0,9,4,8]的顺序。所以只要遍历[8,4,9,0]序列,判断这些元素的在popped数组中的索引是否是递减即可。

    代码如下:

    class Solution(object):
        def validateStackSequences(self, pushed, popped):
            """
            :type pushed: List[int]
            :type popped: List[int]
            :rtype: bool
            """
            dic_push = {}
            dic_pop = {}
            for i,v in enumerate(pushed):
                dic_push[v] = i
            for i, v in enumerate(popped):
                dic_pop[v] = i
    
            for i,v in enumerate(popped):
                push_inx = dic_push[v]
                lastInx = len(popped)
                for j in range(push_inx):
                    if dic_pop[pushed[j]] < i:
                        continue
                    elif dic_pop[pushed[j]] > lastInx :
                        return False
                    lastInx = dic_pop[pushed[j]]
            return True
  • 相关阅读:
    paip.数据库全文检索 attilax总结
    软件网站安全性的设计与检测与解决方案
    防止SQL注入解决方案
    paip.账务系统的安全性
    快速开发字段很多的MIS表
    paip.php调试不能显示局部变量内容w/ xdebug
    程序安全性之配置文件安全
    paip.VS2010未能加载类型
    paip.盘古汉字转拼音组件库使用总结
    paip.跟踪DISCUZ积分日志功能总结
  • 原文地址:https://www.cnblogs.com/seyjs/p/10017935.html
Copyright © 2011-2022 走看看