题解 | #栈的压入、弹出序列#
栈的压入、弹出序列
https://www.nowcoder.com/practice/d77d11405cc7470d82554cb392585106
这个题目的思路我也是参考评论区的大佬的:
1.这个题目接收两个整数序列,也就是两个参数,我们先要定义一个新的栈,也就是arr=[]数组
let arr =[]
2.我们要循环第一个栈pushV也就是第一个参数,讲每次循环的元素push到新栈arr中
for(let i =0; i < pushV.length;i++){ arr.push(pushV[i]) //这个时候的arr 为 1 }
- 我们这个时候再使用while循环 执行条件为arr.length > 0
while(arr.length >0){ //这个时候arr的长度为1 >0 进入该循环 }
4.此时如果新栈arr中的顶元素也就是arr数组中最后一个值,等于第二个队列popV中的首元素,
此时新栈arr中的元素要出栈,将新栈中栈顶元素也就是最后一个元素弹出,并删除第二个序列第一个元素
if(arr[arr.length -1] == popV[0]){ arr.pop() popV.shift() }
5.如果上述if条件不成立的话就else 跳出while循环,
else{ break } //进入到arr.push(pushV[i]) 代码块当前 /* arr = 1,2,3,4,5 popV =4,5,3,2,1 1> 0 true 1 == 4 ? else brak 2> 0 true 2 == 4 ? else brak 3> 0 true 3 == 4 ? else brak 4> 0 true 4 == 4 ? true arr.pop() popV.shift() 此时arr 为1 2 3 此时popV 为5,3,2,1 此时再会进入循环 因为arr的长度为 3 >0 true 3 == 5 ? else brak 此时arr为 1 2 3 5 4 >0 true 5 ==5 true arr.pop() popV.shift() 此时arr 为1 2 3 此时popV 为3,2,1 3> 0 true 3 == 3 true arr.pop() popV.shift() 依次 */
6.当所有条件都执行完 return arr.length==0 ? true : false
#技术序列和测试序列#