JavaScirpt数据结构 + leetcode - 栈和队列

116 阅读2分钟

本文会总结leetcode中一些高频的有关栈和队列数据结构的题目。

概念

栈(Stack):是限定只能在表的一端进行插入和删除操作的线性表。栈是先进后出(First In Last Out )FILO。

队列(Queue):是限定只能在表的一端进行插入和在另一端进行删除操作的线性表。队列是先进先出(First In First Out)FIFO。

相关题目

难度:简单

20. 有效的括号

/**
 * @param {string} s
 * @return {boolean}
 */
var isValid = function(s) {
  const stack = [];
  const map = new Map();
  map.set('(', ')');
  map.set('[', ']');
  map.set('{', '}');
  for (let i = 0; i < s.length; i++) {
    const c = s[i];
    if (map.has(c)) {
      stack.push(c);
    } else {
      if (
        c === ')' && stack[stack.length - 1] === '(' ||
        c === ']' && stack[stack.length - 1] === '[' ||
        c === '}' && stack[stack.length - 1] === '{'
      ) {
        stack.pop();
      } else {
        return false;
      }
    }
  }
  return stack.length === 0 ? true : false;
};
  • 知识点:栈 + 字符串

232. 用栈实现队列

  • 知识点:栈 + 设计

剑指 Offer 30. 包含min函数的栈

  • 知识点:栈 + 设计

剑指 Offer 09. 用两个栈实现队列

  • 知识点:栈 + 设计

1047. 删除字符串中的所有相邻重复项

  • 知识点:栈

155. 最小栈

  • 知识点:栈 + 设计

496. 下一个更大元素 I

  • 知识点:栈

1021. 删除最外层的括号

  • 知识点:栈

难度:中等

1190. 反转每对括号间的子串

  • 知识点:栈

739. 每日温度

  • 知识点:栈 + 哈希表

394. 字符串解码

  • 知识点:栈 + 深度优先搜索

402. 移掉K位数字

  • 知识点:栈 + 贪心算法

456. 132 模式

  • 知识点:栈

227. 基本计算器 II

  • 知识点:栈 + 数学

316. 去除重复字母

  • 知识点:栈 + 贪心算法 + 字符串

341. 扁平化嵌套列表迭代器

  • 知识点:栈 + 设计

150. 逆波兰表达式求值

  • 知识点:栈

503. 下一个更大元素 II

  • 知识点:栈

剑指 Offer 59 - II. 队列的最大值

  • 知识点:栈

难度:困难

42. 接雨水

  • 知识点:栈 + 数组 + 双指针 + 动态规划

224. 基本计算器

  • 知识点:栈 + 数学

84. 柱状图中最大的矩形

  • 知识点:栈 + 数组

85. 最大矩形

  • 知识点:栈 + 数组 + 哈希表 + 动态规划

剑指 Offer 59 - I. 滑动窗口的最大值

  • 知识点:队列 + 滑动窗口

862. 和至少为 K 的最短子数组

  • 知识点:队列 + 二分查找

363. 矩形区域不超过 K 的最大数值和

  • 知识点:队列 + 二分查找 + 动态规划

  • 知识点:

总结

栈和队列是比较基础的数据结构,但是想要用好还要多多练习。