标签:
栈的出栈顺序合法性是指给定一系列元素,如1 - N,按照从小到大的方式入栈,每个元素的出栈时机不定。题目给定一个出栈顺序,我们来判断这个出栈顺序有没有可能发生。
比如对[1,2,3,4,5,6,7,8,9]:
判断方法有两种,一种是对每一个值,其后所有小于它的值的数是一个降序排列。
另一种是模拟入栈和出栈,对出栈序列中每一个数值,如果它当前已经在栈顶,则出栈;如果不在,那么从入栈序列中取出下一个放入栈中;如果需要入栈时入栈序列已空,则这就是一个非法序列。
public static boolean stackOrder(int[] nums){ int[] origin=new int[]{1,2,3,4,5,6,7,8,9}; //假定出栈序列也是1-9的数列 Deque<Integer> q=new ArrayDeque<>(); int index=0,i=0; for (i=0;i<nums.length;){ if(!q.isEmpty()&& nums[i]==q.getLast()){ q.pollLast(); i++; } else { if(index<9) { q.addLast(origin[index++]); } else break; } } return i==nums.length?true:false; }
标签:
原文地址:http://www.cnblogs.com/bethunebtj/p/4832919.html