题目描述:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列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 }