栈的压入、弹出序列(java)

栈的压入、弹出序列

http://www.nowcoder.com/questionTerminal/d77d11405cc7470d82554cb392585106

没有使用模拟,根据pop序列在原序列中下标的升降顺序判断。 观察可以得到,如果pop序列是出栈的数列,序列在原序列的下标要么是全部降序,要么是先升序(升序过程中可以包含差值为1的降序)后降序。

思路:使用map记录原序列中数字所对应的下标index(题目中说明数组中数字都不相同), 然后对pop序列遍历,判断进入降序后,是否有升序存在,如果有则返回false。代码如下

import java.util.*;
public class Solution {
    public boolean IsPopOrder(int [] pushA,int [] popA) {
        int length = pushA.length;
        if (length == 1) {
            return pushA[0] == popA[0];
        }
        //用map记录数字下标
        Map<integer,integer> map = new HashMap<integer,integer>();
        for (int i = 0; i &lt; length; i ++) {
            map.put(pushA[i], i);
        }

        boolean reduce = false;//用于记录是否进入降序
        for (int i = 1; i &lt; length; i++) {
            if (!map.containsKey(popA[i]) || !map.containsKey(popA[i-1])) return false;
            if (reduce &amp;&amp; map.get(popA[i]) - map.get(popA[i -1]) &gt; 0) return false;
            if (!reduce &amp;&amp; map.get(popA[i]) - map.get(popA[i -1]) &lt; -1) reduce = true;
        }
        return true;
    }
}
```</integer,integer></integer,integer>
全部评论
如果{1,2,3,4,5},{3,2,5,4,1}。那么您的程序返回false;但是实际上是true
点赞 回复 分享
发布于 2021-09-30 11:59

相关推荐

10-24 13:36
门头沟学院 Java
Zzzzoooo:更新:今天下午有hr联系我去不去客户端,拒了
点赞 评论 收藏
分享
八极星:我看成了化身一团黑子哈哈哈😂
点赞 评论 收藏
分享
1 收藏 评论
分享
牛客网
牛客企业服务