Java刷LeetCode总结(四)——队列和栈

290 阅读2分钟

队列结构

队列是一种先进先出(FIFO)的数据结构,类似于排队的队伍,每个元素都按照加入队列的先后顺序被处理。队列的基本操作包括入队(enqueue)和出队(dequeue),队列通常用于模拟线程等并发操作,以及广度优先搜索等算法中。

队列的优点是可以保证元素按照加入队列的先后顺序被处理,适用于需要按顺序处理元素的场景。队列的缺点是插入和删除元素的时间复杂度为O(1),但查找元素的时间复杂度为O(n)。

栈结构

栈是一种后进先出(LIFO)的数据结构,类似于堆叠的书本,每个元素都被放在栈顶,最后进入栈的元素最先被处理。栈的基本操作包括压栈(push)和弹栈(pop),栈通常用于函数调用、表达式求值、括号匹配等场景中。

栈的优点是可以保证最后进入栈的元素最先被处理,适用于需要回溯操作的场景。栈的缺点是插入和删除元素的时间复杂度为O(1),但查找元素的时间复杂度为O(n)。

相关题目解法总结

  1. 队列的解法:
  • BFS算法:广度优先搜索算法常常使用队列来实现。将起点入队,然后不断地从队列中取出元素,将其未访问的相邻元素入队,直到找到终点或者队列为空。
  • 滑动窗口问题:使用双端队列来解决滑动窗口问题。双端队列可以在队首和队尾同时进行插入和删除操作,因此可以在O(1)的时间内完成。
  • 任务调度问题:任务调度问题可以使用优先队列来解决。将任务按照优先级加入队列,每次取出优先级最高的任务进行处理。
  1. 栈的解法:
  • 括号匹配问题:使用栈来解决括号匹配问题。将左括号入栈,遇到右括号时弹出栈顶元素进行匹配,如果匹配成功则继续,否则返回false。
  • 逆波兰表达式:逆波兰表达式常常使用栈来解决。将操作数入栈,遇到操作符时弹出栈顶的两个操作数进行计算,将计算结果入栈。
  • 单调栈:单调栈可以在O(n)的时间内找到数组中每个元素的下一个更大或者更小的元素。单调栈通常用于求解最大面积矩形、接雨水等问题。