佛山建站模板厂家,做网站找沈阳横纵网络,wordpress em,比较好的手机网站题目
输入两个整数序列#xff0c;第一个序列表示栈的压入顺序#xff0c;请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序#xff0c;序列4,5,3,2,1是该压栈序列对应的一个弹出序列#xff0c;但4,3,5,1,2就…题目
输入两个整数序列第一个序列表示栈的压入顺序请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序序列4,5,3,2,1是该压栈序列对应的一个弹出序列但4,3,5,1,2就不可能是该压栈序列的弹出序列。
1. 0pushV.length popV.length 1000
2. -1000pushV[i]1000
3. pushV 的所有数字均不相同
示例1
输入[1,2,3,4,5],[4,5,3,2,1]
返回值true
说明可以通过push(1)push(2)push(3)push(4)pop()push(5)pop()pop()pop()pop() 这样的顺序得到[4,5,3,2,1]这个序列返回true
示例2
输入[1,2,3,4,5],[4,3,5,1,2]
返回值false
说明由于是[1,2,3,4,5]的压入顺序[4,3,5,1,2]的弹出顺序要求435必须在12前压入且12不能弹出但是这样压入的顺序1又不能在2之前弹出所以无法形成的返回false 解答
源代码
import java.util.*;public class Solution {/*** 代码中的类名、方法名、参数名已经指定请勿修改直接返回方法规定的值即可** * param pushV int整型一维数组 * param popV int整型一维数组 * return bool布尔型*/public boolean IsPopOrder (int[] pushV, int[] popV) {// write code hereint len pushV.length;DequeInteger stack new ArrayDeque();// 遍历入栈数组的下标int j 0;// 遍历出栈数组的下标for (int i 0; i len; i) {while (j len (stack.isEmpty()||stack.peekLast() ! popV[i])) {stack.offerLast(pushV[j]);j;}if (stack.peekLast() popV[i]) {stack.pollLast();} else {return false;}}return true;}
}
总结
用两个变量记录入栈和出栈数组的下标维护一个临时栈来演示入栈、弹出的顺序如果做得到就返回true否则返回true。