您的位置:首页 > 职场人生

剑指offer面试题之栈的压入、弹出序列

2016-03-26 18:01 555 查看
1,问题:

输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。

2,想法:

既然是关于栈,首先想到栈的应用,用一个辅助栈,

当栈空时,从进栈序列中进一个,判断栈顶元素是否与出栈序列的第一个元素相同;

若不相同就继续从进栈序列中进一个;

若相同,则出栈,出栈序列的指标指向下一个元素,

按照这种思想,进栈序列肯定会全部进到辅助栈里边,若出栈序列是一个正确的序列,则辅助栈到最后就会变空,

若最后辅助栈不为空,则不是一个正确的出栈序列。

3,编码为:

class Solution {
public:
bool IsPopOrder(vector<int> pushV,vector<int> popV) {
if (pushV.empty() || popV.empty())
{
return false;
}
if (pushV.size() != popV.size())
{
return false;
}
unsigned int length = pushV.size();
unsigned int i, j;
stack<int> temp;
for (i = 0, j = 0; i < length && j < length;)
{
if (temp.empty())
{
temp.push(pushV[i]);
i++;
}
while (i < length && temp.top() != popV[j])//这些while循环
{               //必须先判断i是否小于length才能进行下一步
temp.push(pushV[i]);
i++;
}
while (j < length && temp.top() == popV[j])
{
temp.pop();
j++;
}
}
/*if (i >= length && j >= length)
{
return true;
}
else
return false;
*/
return temp.empty();

}
//对于这种判断条件很是陌生!!!!!!写了好久才出来!!!!
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: