zoukankan      html  css  js  c++  java
  • 112th LeetCode Weekly Contest 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.

    判断栈的合法性

    class Solution {
    public:
        bool validateStackSequences(vector<int>& pushed, vector<int>& popped) {
            if(pushed.size()==0&&pushed.size()==0){
                return true;
            }
            if(pushed.size()!=popped.size()){
                return false;
            }
            stack<int>s;
            int index = 0,outdex = 0;
            while(index<pushed.size()&&outdex<=popped.size()){
                if(pushed[index]==popped[outdex]){
                    index++;
                    outdex++;
                }else if(!s.empty()&&popped[outdex]==s.top()){
                    while(!s.empty()&&popped[outdex]==s.top()){
                        s.pop();
                        outdex++;
                    }
                }else{
                    s.push(pushed[index]);
                    index++;
                }
                if (index >= popped.size())//如果入栈序列已经走完,出栈序列和栈顶元素一一比较
                {
                    while (!s.empty() && popped[outdex]==s.top())
                    {
                        s.pop();
                        outdex++;
                    }
    
                    //如果和栈中比较完,两个序列都走完了,即表明顺序合法
                    if (index == pushed.size() && outdex == popped.size())
                    {
                        return true;
                    }
                    else
                    {
                        return false;
                    }
                }
            }
        }
    };
     
  • 相关阅读:
    Oracle查询中将结果列按分组用逗号隔开,拼接成一行(listagg函数)
    Oracle SQL获取每个分组中日期最大的一条数据
    oracle字段根据字符串拆分,用subStr()和inStr()进行拆分
    javascript求最大公约数
    javascript单链表
    防input required属性的提示框
    css3绘制三色字
    js和php时间戳的问题
    ajax使用的一些错误
    浏览器js文件未及时更新问题
  • 原文地址:https://www.cnblogs.com/yinghualuowu/p/10020211.html
Copyright © 2011-2022 走看看