输入两个整数序列,第一个序列表示栈的压入顺序, 请判断第二个序列是否可能为该栈的弹出顺序。

思路 根据出栈顺序模拟一次入栈
入栈元素 等于出栈顺序第一个时就 该元素就可以出栈了
比如 入12345 出栈顺序45321
入1 出栈顺序第一个是4嘛 说明只有入到4才会出啊 -》
4
3
2
1 -》入到4了 相等那就出-》
3
2
1继续正常入
5
3
2
1 5对上了5321那就出啊
-》3
2
1
如此循环下去 只要入栈又全出那就说明顺序是对的
然后呢我踩了3个坑
1java.lang.ArrayIndexOutOfBoundsException(数组越界)处理
2Exception in thread "main" java.util.EmptyStackException
3if判断不周全 该用while的

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

思路 根据出栈顺序模拟一次入栈
入栈元素 等于出栈顺序第一个时就 该元素就可以出栈了
比如 入12345 出栈顺序45321
入1 出栈顺序第一个是4嘛 说明只有入到4才会出啊 -》
                                         4
                                         3
                                         2
                                         1 -》入到4了 相等那就出-》
                                                                3
                                                                2
                                                                1继续正常入
                                                                            5
                                                                            3
                                                                            2
                                                                            1 5对上了5321那就出啊
                                                                              -》3
                                                                                 2
                                                                                 1
                                                                                 如此循环下去 只要入栈又全出那就说明顺序是对的
 然后呢我踩了3个坑
 1java.lang.ArrayIndexOutOfBoundsException(数组越界)处理
 2Exception in thread "main" java.util.EmptyStackException
 3if判断不周全 该用while的
 */

public class t21 {
    public class Solution {
        public boolean IsPopOrder(int [] pushA,int [] popA) {
            int length = popA.length;
            Stack<Integer> sta = new Stack<>();
            int i=0,j=0;
            while (i<length){ // 1java.lang.ArrayIndexOutOfBoundsException(数组越界)处理 不应该是<=的
                sta.push(pushA[i]);
                while (!sta.isEmpty() && sta.peek()==popA[j]){ //这个while循环原本只写了一个if判断 导致他只判断了一次就结束了 但是有可能会出栈几个元素的所以错了
                                        //这里应该再加一个判断条件 就是栈不能为空 或者控制 j(出栈)的总次数不能多于length j<lengthj从0开始的{j < len&& sta.peek()==popA[j]} 否则他就会循环多次但是栈是null 就会报错
                    j++;
                    sta.pop();
                }
                i++;
            }
            return sta.isEmpty();
        }
    }
}

 

posted @ 2020-12-17 16:25  数码暴农  阅读(367)  评论(0)    收藏  举报
TOP