美文网首页
剑指 Offer 31. 栈的压入、弹出序列

剑指 Offer 31. 栈的压入、弹出序列

作者: bangbang2 | 来源:发表于2020-07-11 08:40 被阅读0次
image.png

解题思路

基本思路:
1、在把入栈数组的每一个节点顺序压入栈中
2、设置一个变量来记录弹栈队列的索引
3、在压栈时比较,栈顶元素与弹栈索引处的值是否一致,如果一致,说明该元素可以被弹出
4、如果栈为空,则说明队列正确,否则是错误的
小问题:
peek()只获取栈顶值,不弹出栈顶元素
栈来判断是否为空的函数为empty(),不是isEmpty()

代码

class Solution {
    public boolean validateStackSequences(int[] pushed, int[] popped) {
       Stack<Integer> s=new Stack<Integer>();
       int j=0;//是poped数组的索引
       for(int i=0;i<pushed.length;i++){//压入pushed的每一个点
              s.push(pushed[i]);
              while(!s.empty()&&s.peek()==popped[j]){//模拟栈操作,如果栈顶和poped数组的当前值一样,说明该
              //压栈元素的弹出栈的顺序是可行的
                s.pop();//弹出元素
                j++;//索引向前

              }

       }
       return s.empty();//如果为空,说明弹出队列正确,因为每一个元素的弹出栈的顺序都是可行的
    }
}

相关文章

网友评论

      本文标题:剑指 Offer 31. 栈的压入、弹出序列

      本文链接:https://www.haomeiwen.com/subject/ceybcktx.html