/*
此算法为本人猜想,有疑义
找到递增的最后一个
在这个数后pop不允许出现两个数的顺序都小于它且这两个数的顺序递增
如pop序为{1,2,3,6,4,5}
先找到6,发现后面4<6 && 5<6 && 5>4 , 则判定这个pop序为false。
又如{1,2,6,5,3,4}
先找到6,发现后面3<6 && 4<6 && 4>3 , 判定为false
{1,3,5,2,6,4} 5后面有2,4出现,判定为false
*/
#include <iostream>
using namespace std;
int getPos(int* arr,int num,int len){
for(int i = 0 ;i <len ;i ++) {
if(arr[i] == num)
return i;
}
return -1;
}
bool isValidate(int* push,int* pop,int len){
int cur = 0;
while(cur < len) {
while(cur+1 <len && getPos(push,pop[cur],len) < getPos(push,pop[cur+1],len))
cur ++;
for(int j = cur+1;j<len;j++){
int cur2 = j;
while(cur2 < len) {
int p1 = getPos(push,pop[cur2],len);
int p2 = getPos(push,pop[j],len);
if(p1>p2 && p1 < push[cur+1] && p2 < push[cur+1]) {
return false;
}
cur2++;
}
}
cur++;
}
return true;
}
int main()
{
int push[] = {1,2,3,4,5,6};
int pop[] = {1,3,5,2,6,4};
cout<<isValidate(push,pop,6)<<endl;
return 0;
}
两个整数序列,其中一个序列表示栈的push顺序, 判断另一个序列有没有可能是对应的pop顺序。
最新推荐文章于 2021-05-21 06:36:12 发布