剑指offer-栈的压入、弹出序列

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

思路:如果弹出序列4,则因为压入顺序是1234,所以在4的弹出序列后321肯定是按这样的顺序的,利用map存储本身和它压入的顺序序号,遍历弹出顺序进行判断。

ac代码:

 1 import java.util.ArrayList;
 2 import java.util.HashMap;
 3 import java.util.List;
 4 import java.util.Map;
 5 public class Solution {
 6     public boolean IsPopOrder(int [] pushA,int [] popA) {
 7         if(pushA.length!=popA.length)
 8             return false;
 9       Map<Integer,Integer>map=new HashMap<Integer,Integer>();
10         for(int i=0;i<pushA.length;i++){
11             map.put(pushA[i],i);
12         }
13         for(int i=0;i<popA.length;i++){
14             if(map.get(popA[i])==null)
15                 return false;
16         }
17         boolean flag1=true;
18         for(int i=0;i<popA.length;i++){
19             int x=popA[i];
20             int k=map.get(x);
21             int min=k;
22             
23             for(int j=i+1;j<popA.length;j++){
24                 if(map.get(popA[j])<k){
25                     if(map.get(popA[j])<min)
26                         min=map.get(popA[j]);
27                     else{
28                         return false;
29                         
30                     }
31                 }
32             }
33             
34             }
35             
36         return flag1;
37     }
38 }
原文地址:https://www.cnblogs.com/llsq/p/8796426.html