名企算法题目总结(1)

1.带有最小功能的stack

  空间复杂度O(n),时间复杂度O(1)

2.两个stack实现queue(进,出,清空)

  stack1 负责进,stack2 负责出

  若stack2 没数据,stack1导入到stack2

3.两个queue实现stack(一直不能理解存在的意义)

 -----    ++++

   queue1负责进(顺序为1,2,3,4),结构为4321,现在要出4,但是只能顺序出1,2,3,4,;1,2,3需要存起来,放到queue2中

   queue2结构为321,现在要出3;1,2需要存起来,放到queue1中

 。。。。

4. 仅使用递归和栈操作,逆序栈

1234->4321;

分析:数据流程表明,必须拿到1,然后栈变成432,然后插入1
  拿到1,栈变成了432 等价于 拿到1,栈变成234

  即我们要解决的问题是如何拿到栈底元素的问题

1)如何拿到栈底元素(使用递归)

分析:1234,首先只能拿到4,剩下123(可以递归拿到1,剩余23),插入4
int get_deep_stack(stack<int>& m_stack) {
assert(m_stack.empty());
int val=m_stack.top();
m_stack.pop();
if(m_stack.empty()){
return val;
}
else{
int val2=get_deep_stack(m_stack);
m_stack.push(val);
return val2;
}
}
////////////
‘void reverse_stack(stack<int>& m_stack)
{
assert(m_stack.empty());
int val=get_deep_stack (m_stack);
reverse_stack(m_stack);
m_stack.push(val);
}

原文地址:https://www.cnblogs.com/sofard/p/9922974.html