个人主页:一二三o-0-O的博客
技术方向:C/C++客户端资深工程师(直播+音视频剪辑)
作者简介:数据结构算法与音视频领域创作者
系列专栏:牛客网面试必刷
专栏目标:帮助伙伴们通过系统训练,掌握数据结构与算法,收获心仪Offer
推荐一个找工作神器:牛客刷题网 【面试经验|实习招聘内推,求职就业一战解决】
如果对您有帮助的话,欢迎点赞收藏,关注不迷路
开启刷题,请点击右边链接进行跳转点击这里
输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。
1.0<=pushV.length == popV.length <=1000
2.-1000<=pushV[i]<=1000
3.pushV 的所有数字均不相同
根据题目描述是要验证提供的第一个序列表示栈的压入顺序,返回第二个序列是否可能为该栈的弹出顺序。对于第一个压入序列,只要辅助栈为空,就将元素依次入栈。遇到一个元素等于当前的第二个序列的元素,那就停止将第一个序列元素继续入栈,先出栈。如果能按照这个流程将两个序列都访问完,就返回true,否则返回false。
首先我们要掌握stack的一些基础操作:
-----将元素入栈-----
std::stack mystack;
// 依次将元素1-10入栈
for (int i=1;i<=10;i++) mystack.push(i);
-----判断stack是否为空-----
std::stack mystack;
for (int i=1;i<=10;i++) mystack.push(i);
// 如果栈不为空,进入循环
while (!mystack.empty())
{
}
----获取stack中元素数量-----
std::stack mystack;
for (int i=1;i<=10;i++) mystack.push(i);
// 获取数量
int size = mystack.size();
-----获取栈顶元素-----
std::stack mystack;
for (int i=1;i<=10;i++) mystack.push(i);
// 获取栈顶元素
int topNum = mystack.top();
-----弹出栈顶元素-----
std::stack mystack;
int sum (0);
for (int i=1;i<=10;i++) mystack.push(i);
while (!mystack.empty())
{
sum += mystack.top();
// 弹出栈顶元素
mystack.pop();
}
std::cout << "total: " << sum << ‘\n’;
具体的解决方案如下:
// 获取序列的大小
int nPop = popV.size();
//记录访问第二个序列的下标
int index{};
//声明辅助栈
stack< int > sPush;
// 遍历第一个序列
for(int i{};i// 获取第二个序列的当前元素
int target = popV[i];
//如果当前辅助栈为空或者辅助栈定元素不等于第二个序列的当前元素,就持续将第一个序列元素入栈
while(index < nPop && (sPush.empty() || sPush.top() != target)){
sPush.push(pushV[index++]);
}
// 栈顶元素等于第二个序列数组当前元素就出栈
if(sPush.top() == target){
sPush.pop();
}else {//第二个序列无法依次弹出,就是不匹配,返回false
return false;
}
}
class Solution {
public:
bool IsPopOrder(vector<int> pushV,vector<int> popV) {
int nPop = popV.size();
int index{};
stack<int> sPush;
for(int i{};i<nPop;++i){
int target = popV[i];
while(index < nPop && (sPush.empty() || sPush.top() != target)){
sPush.push(pushV[index++]);
}
if(sPush.top() == target){
sPush.pop();
}else return false;
}
return true;
}
};
祝愿所有的伙伴都能拿到自己心仪的Offer!伙伴们点击右边链接立刻开启刷题吧:牛客——刷题网