辅助栈的妙用 + 斐波那契数列

问题1:栈的压入序列 和 弹出 序列面试题31. 栈的压入、弹出序列(模拟,清晰图解) - 栈的压入、弹出序列 - 力扣(LeetCode)

 思路: 引入一个辅助栈,模拟压入和弹出序列的先入后出

    对于压入序列,当栈顶元素 == 弹出序列的当前元素,栈顶立即出栈;

class Solution {
public:
    bool validateStackSequences(vector<int>& pushed, vector<int>& popped) {
        stack<int>tmp;
        int k = 0;
        for(int i = 0; i < pushed.size(); ++i){
            tmp.push(pushed[i]);
            while(!tmp.empty() && tmp.top() == popped[k]){
                tmp.pop();
                ++k;
            }
        }
        return tmp.empty();
    }
};

 问题2:青蛙跳台阶问题;

    等价于斐波那契数列,初始值为f(0) =1; f(1) =1; f(2) = 2; f(n) = f(n-1)+f(n-2);

    循环求余是为了防止 大数 溢出;

    时间复杂度:O(N);空间复杂度:O(1);

class Solution {
public:
    int numWays(int n) {
        int a = 1,b = 1, sum;
        for(int i = 0; i < n; ++i){
            sum = (a+b)%1000000007;
            a = b;
            b = sum;
        }
        return a;
    }
};

 

posted @ 2023-02-16 22:13  QianFa01  阅读(32)  评论(0)    收藏  举报