21.判断栈弹出顺序是否正确

题目描述:

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

思路分析:

??该题的思路就是我们可以设置一个栈来模仿整个压栈的过程。当栈顶的元素不等于弹出数组首元素时,我们就继续压元素入栈,知道遇见相同的元素,这时栈顶弹出,弹出序列后移一位,继续前面的操作,如果最后栈为空,那么弹出序列正确。

代码:

import java.util.ArrayList;
import java.util.*;
public class Solution {
    public boolean IsPopOrder(int [] pushA,int [] popA) {
        Stack<Integer>s1=new Stack<>();
        if(pushA.length!=popA.length)
            return false;
        int i=0;
        int j=0;
        s1.push(pushA[i++]);
        while(j<popA.length){
            while(s1.peek()!=popA[j]){
                if(i>=pushA.length)
                    return false;
                s1.push(pushA[i++]);
            }
            s1.pop();
            j++;
        }
        return s1.isEmpty();
    }
}

原文地址:https://www.cnblogs.com/yjxyy/p/10726490.html

时间: 2024-11-29 08:38:03

21.判断栈弹出顺序是否正确的相关文章

面试题——栈的压入、弹出顺序

题目描述: 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列.(注意:这两个序列的长度是相等的) 思路: 对于例子,先给出模拟的规律: 对于压入顺序1,2,3,4,5以及弹出序列4,5,3,2,1 考虑弹出序列第一个元素4,4既然是第一个被抛出的元素,那么由压入元素的顺序可知,1,

剑指offer 栈的压入弹出 顺序

判断: 如果下一个弹出的数字刚好是栈顶元素,那么直接弹出 如果下一个弹出的数字不在栈顶,我们要把压栈序列中,还没有入栈的数字压入辅助栈,知道把下一个需要弹出的数字压入栈顶 如果所有的数字都入栈,但是仍然没有找到下一个弹出的数字,那么该序列不可能为弹出序列. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 class Solution { public:     bool IsPopOrder(vector<int> 

剑指Offer20 栈的压入弹出序列是否正确

1 /************************************************************************* 2 > File Name: 20_IsPopOrder.cpp 3 > Author: Juntaran 4 > Mail: [email protected] 5 > Created Time: 2016年08月30日 星期二 19时53分19秒 6 **************************************

判断栈的出栈顺序合法性

栈的出栈顺序合法性是指给定一系列元素,如1 - N,按照从小到大的方式入栈,每个元素的出栈时机不定.题目给定一个出栈顺序,我们来判断这个出栈顺序有没有可能发生. 比如对[1,2,3,4,5,6,7,8,9]: [1,2,3,4,5,6,7,8,9]是一个合法出栈序列 [9,8,7,6,5,4,3,2,1]也是一个合法序列 [4,5,3,2,7,6,1,8,9]也是一个合法序列 [3,4,5,1,2,9,8,7,6]就是一个非法序列 判断方法有两种,一种是对每一个值,其后所有小于它的值的数是一个降

移动端判断键盘弹出和收起

根据键盘的展开和收起我们可以判断页面的可视区域的高度来操作,具体代码是这样的 const originHeight = document.documentElement.clientHeight || document.body.clientHeight; window.addEventListener('resize', () => { const resizeHeight = document.documentElement.clientHeight || document.body.cli

剑指offer---栈的压入,弹出顺序

class Solution { public: bool IsPopOrder(vector<int> pushV, vector<int> popV) { stack<int> stack1; int i = 0; int j = 0; stack1.push(pushV[0]); while ((!stack1.empty()) && (j<popV.size())) { if ((stack1.top() != popV[j]) &

21、栈的压入、弹出序列

一.题目 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列. 二.解法 1 import java.util.Stack; 2 public class Solution { 3 public boolean IsPopOrder(int [] pushA,int [] popA) {

[剑指offer] 判断栈的弹出序列

题目描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列. 输入描述 压入序列 输出描述 判断是否为出栈序列的boolean值 题目分析 解法一 运行时间:26ms 占用内存:629k public class Solution { public boolean IsPopOrder

21.栈的压入、弹出序列

题目描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列.(注意:这两个序列的长度是相等的) 题目解答 import java.util.ArrayList; import java.util.Stack; //一定记得加这个包 public class Solution { p