思路
(模拟 ) O ( n ) O(n) O(n)
我们定义一个空栈st
,然后模拟这个过程。
假设我们已经处理了出栈序列中的前i-1
个数,现在要让popV[i]
出栈。如果popV[i]
不在栈中,我们就要将入栈序列pushV[i]
中的若干个数压进栈中,直到popV[i]
入栈。
-
如果当前要出栈的
popV[i]
元素在栈首,那么我们将其弹出。 -
如果当前要出栈的
popV[i]
元素不在栈首,那么原问题无解。
最后判断st
中元素是否为空,为空则表示当前出栈序列可取。
时间复杂度分析
遍历整个出栈序列的时间复杂度为 O ( n ) O(n) O(n),while
循环最多执行n
次,因此总的时间复杂度为 O ( n ) O(n) O(n)
代码
class Solution {
public:
bool isPopOrder(vector<int> pushV,vector<int> popV) {
if(pushV.size()!=popV.size()) return false; //两个序列长度不等,直接返回false
stack<int>st;
int k = 0;
for(int i = 0; i < popV.size(); i++)
{
while(st.empty()||popV[i] != st.top()) st.push(pushV[k++]);
if(st.top() == popV[i]) st.pop();
else return false;
}
return st.empty();
# 最后分享一波我的面试宝典——一线互联网大厂Java核心面试题库
**以下是我个人的一些做法,希望可以给各位提供一些帮助:**
> **[点击《一线互联网大厂Java核心面试题库》即可免费领取](https://gitee.com/vip204888/java-p7)**,整理了很长一段时间,拿来复习面试刷题非常合适,其中包括了Java基础、异常、集合、并发编程、JVM、Spring全家桶、MyBatis、Redis、数据库、中间件MQ、Dubbo、Linux、Tomcat、ZooKeeper、Netty等等,且还会持续的更新...可star一下!
![image](https://img-blog.csdnimg.cn/img_convert/185d035b03551f722bf541a1834389a0.png)
**283页的Java进阶核心pdf文档**
> Java部分:Java基础,集合,并发,多线程,JVM,设计模式
>
> 数据结构算法:Java算法,数据结构
>
> 开源框架部分:Spring,MyBatis,MVC,netty,tomcat
>
> 分布式部分:架构设计,Redis缓存,Zookeeper,kafka,RabbitMQ,负载均衡等
>
> 微服务部分:SpringBoot,SpringCloud,Dubbo,Docker
![image](https://img-blog.csdnimg.cn/img_convert/5b80fbfcd2eee7de02437547500fc15b.png)
**还有源码相关的阅读学习**
![image](https://img-blog.csdnimg.cn/img_convert/e8cc2da450b7d2b49792bdf058470410.png)
mg-fm2Rlork-1628421726842)]
**还有源码相关的阅读学习**
[外链图片转存中...(img-yBls3zbW-1628421726843)]