辅助栈的妙用 + 斐波那契数列
问题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; } };
浙公网安备 33010602011771号