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

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();//如果为空,说明弹出队列正确,因为每一个元素的弹出栈的顺序都是可行的
    }
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。