面试题31:栈的压入、弹出序列

思路:按照入栈的顺序将push数组入栈,直到遇到与pop数组相同的元素,然后将其从push数组中弹出。重复这个过程。

#include <iostream>
#include <vector>
#include <stack>
using namespace std;

// 注意:默认两个数组的长度是相等的。
bool f(const int* push, const int* pop, int length) {
    if (push == nullptr || pop == nullptr || length <= 0) {
        return false;
    }
    
    stack<int> stack;
    int push_ind = 0;
    int pop_ind = 0;
    stack.push(push[push_ind]);
    ++push_ind;

    while (pop_ind < length) {
        if (pop[pop_ind] != stack.top()) {
            if (push_ind < length) {
                stack.push(push[push_ind]);
                ++push_ind;
            }
            else {
                return false;
            }
        }
        else {
            stack.pop();
            ++pop_ind;
            if (stack.empty() && push_ind < length) {
                stack.push(push[push_ind]);
                ++push_ind;
            }
        }
    }

    return true;

}

int main()
{
    int a[5] = {1,2,3,4,5};
    int b[5] = {1,2,3,5,4};
   
    cout << f(a, b, 5) << endl;


    return 0;
}


参考:《剑指offer》

发布了87 篇原创文章 · 获赞 2 · 访问量 2960
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 深蓝海洋 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览