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
  • 相关阅读:
    工具 Dotnet IL Editor 推荐
    VC6.0开发OCX按钮控件
    变量共享分析(Thread)
    一个月掌握VC++2010?
    细说Angular ngclass
    2013 北京 QCon热点分享
    RadioButtonList
    NSubstitute完全手册1
    使用MEF实用IOC(依赖倒置)
    发布订阅模式 之 同步订阅、异步订阅和离线订阅
  • 原文地址:https://www.cnblogs.com/seyjs/p/10017935.html
Copyright © 2011-2022 走看看