力扣算法刷题Day10 | 栈与队列:用栈实现队列 用队列实现栈

:力扣题目:232.用栈实现队列

刷题时长:30min

解题方法:第二个栈作为临时的辅助空间。在队列需要pop操作的时候,将第一个栈内元素依次pop后push进第二个栈内,直至第一个栈内仅剩最后一个元素。完成pop队首元素后,将第二个栈内的所有元素依次pop并push回第一个栈内。

复杂度分析:pop操作O(n^2)?

问题总结

  1. 将stack2仅作为临时空间倒来倒去,重复操作较为低效

本题收获

  1. 输入栈(stack1)+ 输出栈(stack2):所有需要push的元素都存进stack1。当需要pop操作时,检查此时stack2是否为空。若stack2不为空,直接pop;若stack2为空,则将所有stack1中的元素依次pop出后再push进stack2,此时stack2栈顶元素即为队首元素。

待解决:复杂度分析


力扣题目:225. 用队列实现栈

刷题时长:10min

解题方法:同上,第二个队列作为临时的辅助空间。

复杂度分析:

问题总结

  1. pop操作后又将queue2内的元素依次append回queue1,重复操作较为低效

本题收获

  1. 两个队列解法的优化:pop操作后无需从2倒回1,可将queue1和queue2直接进行swap
  2. 用一个队列实现:将队列最后一个元素保留,其他元素依次从队首pop后push进队尾

你可能感兴趣的:(算法,数据结构)