> 文章列表 > 面试手撕算法100题(更新中)

面试手撕算法100题(更新中)

面试手撕算法100题(更新中)

文章目录

    • 数组
    • 链表
    • 二叉树
    • 栈与队列
    • 哈希表HashMap
    • 字符串
    • 二分查找
    • 排序
    • 深度优先搜索DFS
    • 广度优先搜索BFS
    • 位运算
    • 双指针
    • 滑动窗口
    • 回溯法
    • 动态规划
    • 数学

数组

  • 合并两个有序数组
  • 搜索二维矩阵II
  • 螺旋矩阵
  • 旋转图像

链表

  • 反转链表
  • K个一组翻转链表
  • 环形链表
  • 合并两个有序链表
  • 相交链表
  • 反转链表II
  • 合并K个排序链表
  • 环形链表II
  • 重排链表
  • 链表中倒数第K个节点
  • 删除链表的倒数第N个节点
  • 删除链表中的重复元素II
  • 两数相加
  • 排序链表
  • 回文链表
  • 删除排序链表中的重复元素
  • 复制带随机指针的链表
  • 两两交换链表中的节点

二叉树

1. 遍历

  • 二叉树的前序遍历
  • 二叉树的中序遍历
  • 二叉树的后序遍历
  • 二叉树的层序遍历
  • 二叉树的锯齿形层序遍历
  • 二叉树的右视图

2. 二叉搜索树

  • 验证二叉搜索树
  • 二叉搜索树的第K大节点
  • 将二叉搜索树转化为排序的双向链表

3. 求深度

  • 二叉树的最大深度
  • 平衡二叉树

4. 求直径

  • 二叉树的直径

5. 对称

  • 对称二叉树

6. 翻转

  • 翻转二叉树

7. 最近公共祖先

  • 二叉树的最近公共祖先

8. 路径

  • 路径总和
  • 二叉树中的最大路径和

9. 重建二叉树

  • 从前序与中序遍历序列构造二叉树

栈与队列

  • 有效的括号
  • 接雨水
  • 用栈实现队列
  • 用队列实现栈
  • 最小栈
  • 基本计算器II

哈希表HashMap

  • LRU缓存机制
  • 两数之和
  • 三数之和
  • 缺失的第一个正数
  • 多数元素
  • 最长连续序列

字符串

  • 字符串相加
  • 字符串转换整数(atoi)
  • 翻转字符串里的单词
  • 字符串相乘
  • 验证IP地址
  • 最长公共前缀
  • 字符串解码

  • 数组中的第K个最大元素

二分查找

  • 二分查找
  • 搜索旋转排序数组
  • Sqrt(x)
  • 寻找两个正序数组的中位数
  • 在排序数组中查找元素的第一个和最后一个位置
  • 寻找旋转排序数组的最小值
  • 寻找峰值

排序

  • 快速排序
  • 归并排序
  • 堆排序
  • 合并区间
  • 最大数

深度优先搜索DFS

  • 岛屿数量
  • 求根节点到叶节点数字之和

广度优先搜索BFS

  • 岛屿最大面积
  • 二叉树的完全性检验

位运算

  • 只出现一次的数字

双指针

  • 下一个排列
  • 比较版本号

滑动窗口

  • 无重复字符的最长子串
  • 最小覆盖子串
  • 滑动窗口最大值

回溯法

  • 全排列
  • 复原IP地址
  • 路径总和II
  • 子集
  • 括号生成
  • 组合总和

动态规划

  • 最大子数组和
  • 买卖股票的最佳时机
  • 买卖股票的最佳时机II
  • 最长回文字串
  • 最长递增子序列
  • 爬楼梯
  • 编辑距离
  • 最长公共子序列
  • 最长重复子数组
  • 零钱兑换
  • 最长有效括号
  • 最小路径和
  • 不同路径
  • 最大正方形
  • 打家劫舍

数学

  • 用Rand7()实现Rand10()