算法刷题11--合法出栈序列判断--poj-1363

题目:


思路:

自己想没有想出来…

看图:



看图很容易理解,用了一个原顺序栈,顺序不对栈定不能pop净


代码:

#include <stack>
#include <queue>
#include <stdio.h>


//序列存储到队列中
bool check_valid(std::queue<int> &order){
	//存放1-n的栈s
	std::stack<int> s;
	int n = order.size();
	for (int i = 1; i <= n; ++i){
		s.push(i);
		while(!s.empty()&&s.top()==order.front()){
			//如果s不为空,且栈顶和队头相等
			s.pop();
			order.pop();
		}
	}

	//最后判断
	if(!s.empty()){
		return false;
	}
	return true;
}


int main(){
	int n;
	int train;
	scanf("%d", &n);
	while(n){
		scanf("%d", &train);
		while(train){
			std::queue<int> order;
			order.push(train);
			for(int i = 1; i < n; i++){
				scanf("%d",&train);
				order.push(train);
			}
			if(check_valid(order)){
				printf("Yes\n");
			}else{
				printf("No\n");
			}
			scanf("%d", &train);

		}
		printf("\n");
		scanf("%d", &n);
	}
	return 0;
}

总结:
新的开始,继续加油!

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值