较为困难的是如何选择算法进行合法性判断,最后是采用时时验证(边压栈边出栈)来判断合法性
- #include
- #include
- #include
- using namespace std;
- int main()
- {
- int n;
- int num[105];
- while(cin>>n)
- {
- if(n==0)
- break;
- for(int index=0;index
//要输入进行判断的数组 - {
- cin>>num[index];
- }
- stack<int> st;
- int index=0;
- for(int i=1;i<=n;i++)//判断栈的合法性
- {
- st.push(i);//按题目顺序从1到N进行压栈
- while(!st.empty()&&st.top()==num[index])//遇到合适相等的出栈,注意使用的是while循环
- {
- st.pop();
- index++;//index变化,接着判断下一个输入的数字
- }
- }
- if(st.empty()&&index==n)//如果st全部出栈,就是合法
- cout<<"Yes"<
- else
- cout<<"No"<
- }
-
- return 0;
- }
可以使用这一句接近num数组的动态创建问题
vector<int> num= vector<int>(n, 0);
-
相关阅读:
Java类是如何默认继承Object的?(转载)
innovus: clock cell spacing如何设置?
Android Studio 多渠道打包
UI控件Telerik UI for WinForms新主题——VS2022启发式主题
这 8 张图终于把 K8S 调度器讲通透了!
LIO-SAM 详读代码笔记 -- 4.featureExtraction
机器学习实战:基于sklearn的工业蒸汽量预测
uni-app常用场景速查记录
go使用zap + lumberjack重构项目的日志系统
MybatisPlus 3 DQL 编程控制 3.2 查询投影
-
原文地址:https://blog.csdn.net/m0_62512076/article/details/132946791