leetcode hot100 梳理

熟悉一些常用的算法编程题,在应对面试的时候,还是很有帮助的。通过分门别类,将 leetcode hot100 的题目进行梳理,能够加强个人的归纳总结能力,也能让自己在下次复习的时候能够快速的熟悉。
对于 leetcode 上常见的题目,可以大致分为以下几大块:数组、链表、哈希表、字符串、双指针法、栈与队列、二叉树、回溯算法、贪心算法、动态规划、单调栈、图。

hot 100

  • 数组
  • 哈希表
  • 链表
  • 双指针法
  • 动态规划
  • 回溯法
  • 栈与队列
  • 二叉树
  • 其他

数组

  • easy
    • 买卖股票的最佳时机 记录最低价格,更新最大diff
    • 只出现一次的数字 亦或大法
    • 多数元素 哈希法;排序法
    • 移动零
    • 找到所有数组中消失的数字 加数标记法
  • medium
    • 下一个排列
    • 搜索旋转排序数组 二分法
    • 在排序数组中查找元素的第一个和最后一个位置 二分法
    • 旋转图像 自外向内+旋转转移方程
    • 区间合并 排序
    • 岛屿数量 dfs
    • 数组中的第K个最大元素 快排partion;小顶堆
    • 除自身以外数组的乘积 把乘积拆成两部分 L[i-1] * R[i+1]
    • 搜索二维矩阵II Z形走法
  • hard
    • 寻找两个正序数组的中位数 二分法

哈希表

  • easy
    • 两数之和
  • medium
    • 字母异位词分组
    • 最长连续序列 哈希表查找复杂度为 O(1);unordered_set

链表

  • easy
    • 合并两个有序链表
    • 环形链表 哈希法;快慢指针法
    • 反转链表 pre、cur、next
    • 相交链表
    • 回文链表 栈;反转链表
  • medium
    • 两数相加
    • 删除链表的倒数第 N 个结点 快慢指针
    • 链表排序 归并排序;合并两个有序链表
    • 环形链表II 哈希法;快慢指针法
  • hard
    • 合并K个升序链表 两种方法:分治合并或者采用优先队列
    • LRU 缓存 哈希表+双向链表

双指针法

  • medium
    • 无重复字符的最长子串 双指针滑窗法
    • 盛最多水的容器 从两端开始往里收缩,高度取决于木桶短板
    • 三数之和 排序+双指针,同时注意跳过重复值
    • 颜色分类 用 [start, end) 表示区间。注意开闭关系

动态规划

  • easy
    • 最大子数组和 以i为结尾的子数组和
    • 爬楼梯
  • medium
    • 最长回文子串 以 i 到 j 是否为回文子串作为函数
    • 接雨水 记录左右端的最大高度
    • 跳跃游戏 从后往前找可行的位置;也可以采用贪心思路
    • 不同路径
    • 最小路径和
    • 不同的二叉搜索树 转移方程略难找
    • 打家劫舍
    • 乘积最大子数组
    • 单词拆分
    • 回文子串 动态规划法;中心拓展法
    • 最大正方形 左边、上边、左上边。
    • 完全平方数

回溯法

  • medium
    • 电话号码的字母组合
    • 括号生成 带剪枝的dfs
    • 组合之和
    • 全排列 按位选择
    • 子集
    • 单词搜索 dfs

栈与队列

  • easy
    • 有效的括号
    • 最小栈
  • hard
    • 柱状图中最大的矩形 单调栈
    • 最大矩形 柱状图中最大的矩形之升级版

二叉树

  • easy
    • 二叉树的中序遍历 递归、迭代
    • 对称二叉树 递归
    • 二叉树的最大深度 左右子树maxDepth + 1
    • 翻转二叉树
  • medium
    • 验证二叉搜索树 中序遍历
    • 二叉树的层序遍历 bfs
    • 从前序与中序遍历序列构造二叉树 递归,数组划分
    • 二叉树展开成链表 维护一个pre节点
    • 二叉树的最近公共祖先 dfs 递归

  • medium
    • 课程表 拓扑排序 bfs / dfs

其他

  • medium
    • 前缀树

你可能感兴趣的:(LeetCode,算法)