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


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


之前学校期末考试考过这个判断题,当时是会判断的,但是转化成代码大致思路是知道的但是具体细节考虑不清楚,还是看了评论大佬的解答,感觉自己确实需要多刷题啊,。

解决思路:

1.根据这道题所属的分类,使用栈实现的,所以需要一个临时放数组的栈结构,需要的其他变量:以输入数组为循环的下标变量,设置输出数组的下标变量,初始为0。
2.如果栈是空的,或者栈顶元素不等于输入数组的当前元素,则从输入数组将该元素入栈。
3.如果栈不空并且栈顶元素等于当前输出数组的元素,则输出数组向后移动逐次判断,当前元素是不是等于栈顶元素。
4.直到不符合条件,如果此时栈元素是空的那么该序列就是正确的。

class Solution {
    public boolean validateStackSequences(int[] pushed, int[] popped) {
    Stack<Integer> mystack = new Stack<>();
    int popindex=0;
    for(int i=0;i<pushed.length;i++){
        //栈空或者栈顶元素和输出数组的当前元素值不相等,元素入栈
          if(mystack.isEmpty()||mystack.peek()!=popped[popindex])
          {mystack.push(pushed[i]);}
          //栈不空 并且栈顶元素和输出数组的当前元素值相等,栈顶元素出栈,输出数组向后移动
         while(!mystack.isEmpty()&&mystack.peek()==popped[popindex]){
             mystack.pop();
             popindex++;
         }
          
    }
    //栈空则为正确的输出,栈不空则不是
    return mystack.isEmpty();
    }
}

这道题回头二刷,主要是实现起来好像没有想思路容易。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值