title
输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)
solution
import java.util.*;
public class Solution {
public boolean IsPopOrder(int [] pushA,int [] popA) {
Stack<Integer> stack=new Stack<>();
int j=0;
int i=0;
while (i<popA.length){
stack.push(pushA[i++]);
while (j<popA.length&&stack.peek()==popA[j]){
stack.pop();
j++;
}
}
return stack.empty();
}
}
选择题:比它后出栈的如果有比他小的,那么两者之间没有比这个大的
#include <iostream>
#include <string.h>
#include <stack>
using namespace std;
/*
详细描述:
int JudgeTrainSequence (int maxNum, char *pOutSeq);
输入参数:
int maxNum:进站的火车最大编号
char* pOutSeq:使用字符串表示火车出站序列
输出参数(指针指向的内存区域保证有效):
无。
返回值:
Int: 根据输入的进站序列判断,如果输入的出战序列是可能的,返回1,否则返回0;
*/
int JudgeTrainSequence (int maxNum, char *pOutSeq){
if(pOutSeq == NULL || maxNum <= 0){
return 0;
}//if
int size = strlen(pOutSeq);
stack<int> trainSeq;
// 初始
int index = 1;
for(int i = 0;i < size;){
if(trainSeq.empty() || trainSeq.top() < pOutSeq[i] - '0'){
trainSeq.push(index);
++index;
}//if
else{
trainSeq.pop();
++i;
}//else
}//for
if(!trainSeq.empty()){
return 0;
}//if
return 1;
}