本书精选国内外名企高频面试题并深度拓展,系统地总结了程序员面试中必备的数据结构与算法知识,并以面试者及面试官的双向视角剖析考点与解题思路,适合所有正在准备面试的程序员阅读。
列表所有题解均由 开源社区 Doocs 贡献者提供,正在完善中,欢迎贡献你的题解!
快速搜索题号、题解、标签等,请善用 Control+F(或者 Command+F)。
题号 | 题解 | 标签 | 难度 | 备注 |
---|---|---|---|---|
001 | 整数除法 | 数学 |
简单 | |
002 | 二进制加法 | 位运算 ,数学 ,字符串 ,模拟 |
简单 | |
003 | 前 n 个数字二进制中 1 的个数 | 位运算 ,动态规划 |
简单 | |
004 | 只出现一次的数字 | 位运算 ,数组 |
中等 | |
005 | 单词长度的最大乘积 | 位运算 ,数组 ,字符串 |
中等 | |
006 | 排序数组中两个数字之和 | 数组 ,双指针 ,二分查找 |
简单 | |
007 | 数组中和为 0 的三个数 | 数组 ,双指针 ,排序 |
中等 | |
008 | 和大于等于 target 的最短子数组 | 数组 ,二分查找 ,前缀和 ,滑动窗口 |
中等 | |
009 | 乘积小于 K 的子数组 | 数组 ,滑动窗口 |
中等 | |
010 | 和为 k 的子数组 | 数组 ,哈希表 ,前缀和 |
中等 | |
011 | 0 和 1 个数相同的子数组 | 数组 ,哈希表 ,前缀和 |
中等 | |
012 | 左右两边子数组的和相等 | 数组 ,前缀和 |
简单 | |
013 | 二维子矩阵的和 | 设计 ,数组 ,矩阵 ,前缀和 |
中等 | |
014 | 字符串中的变位词 | 哈希表 ,双指针 ,字符串 ,滑动窗口 |
中等 | |
015 | 字符串中的所有变位词 | 哈希表 ,字符串 ,滑动窗口 |
中等 | |
016 | 不含重复字符的最长子字符串 | 哈希表 ,字符串 ,滑动窗口 |
中等 | |
017 | 含有所有字符的最短字符串 | 哈希表 ,字符串 ,滑动窗口 |
困难 | |
018 | 有效的回文 | 双指针 ,字符串 |
简单 | |
019 | 最多删除一个字符得到回文 | 贪心 ,双指针 ,字符串 |
简单 | |
020 | 回文子字符串的个数 | 字符串 ,动态规划 |
中等 | |
021 | 删除链表的倒数第 n 个结点 | 链表 ,双指针 |
中等 | |
022 | 链表中环的入口节点 | 哈希表 ,链表 ,双指针 |
中等 | |
023 | 两个链表的第一个重合节点 | 哈希表 ,链表 ,双指针 |
简单 | |
024 | 反转链表 | 递归 ,链表 |
简单 | |
025 | 链表中的两数相加 | 栈 ,链表 ,数学 |
中等 | |
026 | 重排链表 | 栈 ,递归 ,链表 ,双指针 |
中等 | |
027 | 回文链表 | 栈 ,递归 ,链表 ,双指针 |
简单 | |
028 | 展平多级双向链表 | 深度优先搜索 ,链表 ,双向链表 |
中等 | |
029 | 排序的循环链表 | 链表 |
中等 | |
030 | 插入、删除和随机访问都是 O(1) 的容器 | 设计 ,数组 ,哈希表 ,数学 ,随机化 |
中等 | |
031 | 最近最少使用缓存 | 设计 ,哈希表 ,链表 ,双向链表 |
中等 | |
032 | 有效的变位词 | 哈希表 ,字符串 ,排序 |
简单 | |
033 | 变位词组 | 哈希表 ,字符串 ,排序 |
中等 | |
034 | 外星语言是否排序 | 数组 ,哈希表 ,字符串 |
简单 | |
035 | 最小时间差 | 数组 ,数学 ,字符串 ,排序 |
中等 | |
036 | 后缀表达式 | 栈 ,数组 ,数学 |
中等 | |
037 | 小行星碰撞 | 栈 ,数组 |
中等 | |
038 | 每日温度 | 栈 ,数组 ,单调栈 |
中等 | |
039 | 直方图最大矩形面积 | 栈 ,数组 ,单调栈 |
困难 | |
040 | 矩阵中最大的矩形 | 栈 ,数组 ,动态规划 ,矩阵 ,单调栈 |
困难 | |
041 | 滑动窗口的平均值 | 设计 ,队列 ,数组 ,数据流 |
简单 | |
042 | 最近请求次数 | 设计 ,队列 ,数据流 |
简单 | |
043 | 往完全二叉树添加节点 | 树 ,广度优先搜索 ,设计 ,二叉树 |
中等 | |
044 | 二叉树每层的最大值 | 树 ,深度优先搜索 ,广度优先搜索 ,二叉树 |
中等 | |
045 | 二叉树最底层最左边的值 | 树 ,深度优先搜索 ,广度优先搜索 ,二叉树 |
中等 | |
046 | 二叉树的右侧视图 | 树 ,深度优先搜索 ,广度优先搜索 ,二叉树 |
中等 | |
047 | 二叉树剪枝 | 树 ,深度优先搜索 ,二叉树 |
中等 | |
048 | 序列化与反序列化二叉树 | 树 ,深度优先搜索 ,广度优先搜索 ,设计 ,字符串 ,二叉树 |
困难 | |
049 | 从根节点到叶节点的路径数字之和 | 树 ,深度优先搜索 ,二叉树 |
中等 | |
050 | 向下的路径节点之和 | 树 ,深度优先搜索 ,二叉树 |
中等 | |
051 | 节点之和最大的路径 | 树 ,深度优先搜索 ,动态规划 ,二叉树 |
困难 | |
052 | 展平二叉搜索树 | 栈 ,树 ,深度优先搜索 ,二叉搜索树 ,二叉树 |
简单 | |
053 | 二叉搜索树中的中序后继 | 树 ,深度优先搜索 ,二叉搜索树 ,二叉树 |
中等 | |
054 | 所有大于等于节点的值之和 | 树 ,深度优先搜索 ,二叉搜索树 ,二叉树 |
中等 | |
055 | 二叉搜索树迭代器 | 栈 ,树 ,设计 ,二叉搜索树 ,二叉树 ,迭代器 |
中等 | |
056 | 二叉搜索树中两个节点之和 | 数组 ,滑动窗口 |
简单 | |
057 | 值和下标之差都在给定的范围内 | 数组 ,桶排序 ,有序集合 ,排序 ,滑动窗口 |
中等 | |
058 | 日程表 | 设计 ,线段树 ,有序集合 |
中等 | |
059 | 数据流的第 K 大数值 | 树 ,设计 ,二叉搜索树 ,二叉树 ,数据流 ,堆(优先队列) |
简单 | |
060 | 出现频率最高的 k 个数字 | 数组 ,哈希表 ,分治 ,桶排序 ,计数 ,快速选择 ,排序 ,堆(优先队列) |
中等 | |
061 | 和最小的 k 个数对 | 数组 ,堆(优先队列) |
中等 | |
062 | 实现前缀树 | 设计 ,字典树 ,哈希表 ,字符串 |
中等 | |
063 | 替换单词 | 字典树 ,数组 ,哈希表 ,字符串 |
中等 | |
064 | 神奇的字典 | 设计 ,字典树 ,哈希表 ,字符串 |
中等 | |
065 | 最短的单词编码 | 字典树 ,数组 ,哈希表 ,字符串 |
中等 | |
066 | 单词之和 | 设计 ,字典树 ,哈希表 ,字符串 |
中等 | |
067 | 最大的异或 | 位运算 ,字典树 ,数组 ,哈希表 |
中等 | |
068 | 查找插入位置 | 数组 ,二分查找 |
简单 | |
069 | 山峰数组的顶部 | 数组 ,二分查找 |
简单 | |
070 | 排序数组中只出现一次的数字 | 数组 ,二分查找 |
中等 | |
071 | 按权重生成随机数 | 数学 ,二分查找 ,前缀和 ,随机化 |
中等 | |
072 | 求平方根 | 数学 ,二分查找 |
简单 | |
073 | 狒狒吃香蕉 | 数组 ,二分查找 |
中等 | |
074 | 合并区间 | 数组 ,排序 |
中等 | |
075 | 数组相对排序 | 数组 ,哈希表 ,计数排序 ,排序 |
简单 | |
076 | 数组中的第 k 大的数字 | 数组 ,分治 ,快速选择 ,排序 ,堆(优先队列) |
中等 | |
077 | 链表排序 | 链表 ,双指针 ,分治 ,排序 ,归并排序 |
中等 | |
078 | 合并排序链表 | 链表 ,分治 ,堆(优先队列) ,归并排序 |
困难 | |
079 | 所有子集 | 位运算 ,数组 ,回溯 |
中等 | |
080 | 含有 k 个元素的组合 | 数组 ,回溯 |
中等 | |
081 | 允许重复选择元素的组合 | 数组 ,回溯 |
中等 | |
082 | 含有重复元素集合的组合 | 数组 ,回溯 |
中等 | |
083 | 没有重复元素集合的全排列 | 数组 ,回溯 |
中等 | |
084 | 含有重复元素集合的全排列 | 数组 ,回溯 |
中等 | |
085 | 生成匹配的括号 | 字符串 ,动态规划 ,回溯 |
中等 | |
086 | 分割回文子字符串 | 深度优先搜索 ,广度优先搜索 ,图 ,哈希表 |
中等 | |
087 | 复原 IP | 字符串 ,回溯 |
中等 | |
088 | 爬楼梯的最少成本 | 数组 ,动态规划 |
简单 | |
089 | 房屋偷盗 | 数组 ,动态规划 |
中等 | |
090 | 环形房屋偷盗 | 数组 ,动态规划 |
中等 | |
091 | 粉刷房子 | 数组 ,动态规划 |
中等 | |
092 | 翻转字符 | 字符串 ,动态规划 |
中等 | |
093 | 最长斐波那契数列 | 数组 ,哈希表 ,动态规划 |
中等 | |
094 | 最少回文分割 | 字符串 ,动态规划 |
困难 | |
095 | 最长公共子序列 | 字符串 ,动态规划 |
中等 | |
096 | 字符串交织 | 字符串 ,动态规划 |
中等 | |
097 | 子序列的数目 | 字符串 ,动态规划 |
困难 | |
098 | 路径的数目 | 数学 ,动态规划 ,组合数学 |
中等 | |
099 | 最小路径之和 | 数组 ,动态规划 ,矩阵 |
中等 | |
100 | 三角形中最小路径之和 | 数组 ,动态规划 |
中等 | |
101 | 分割等和子串 | 数学 ,字符串 ,模拟 |
简单 | |
102 | 加减的目标值 | 数组 ,动态规划 ,回溯 |
中等 | |
103 | 最少的硬币数目 | 广度优先搜索 ,数组 ,动态规划 |
中等 | |
104 | 排列的数目 | 数组 ,动态规划 |
中等 | |
105 | 岛屿的最大面积 | 深度优先搜索 ,广度优先搜索 ,并查集 ,数组 ,矩阵 |
中等 | |
106 | 二分图 | 深度优先搜索 ,广度优先搜索 ,并查集 ,图 |
中等 | |
107 | 矩阵中的距离 | 广度优先搜索 ,数组 ,动态规划 ,矩阵 |
中等 | |
108 | 单词演变 | 广度优先搜索 ,哈希表 ,字符串 |
困难 | |
109 | 开密码锁 | 广度优先搜索 ,数组 ,哈希表 ,字符串 |
中等 | |
110 | 所有路径 | 深度优先搜索 ,广度优先搜索 ,图 ,回溯 |
中等 | |
111 | 计算除法 | 深度优先搜索 ,广度优先搜索 ,并查集 ,图 ,数组 ,最短路 |
中等 | |
112 | 最长递增路径 | 深度优先搜索 ,广度优先搜索 ,图 ,拓扑排序 ,记忆化搜索 ,动态规划 |
困难 | |
113 | 课程顺序 | 深度优先搜索 ,广度优先搜索 ,图 ,拓扑排序 |
中等 | |
114 | 外星文字典 | 深度优先搜索 ,广度优先搜索 ,图 ,拓扑排序 ,数组 ,字符串 |
困难 | |
115 | 重建序列 | 图 ,拓扑排序 ,数组 |
中等 | |
116 | 朋友圈 | 深度优先搜索 ,广度优先搜索 ,并查集 ,图 |
中等 | |
117 | 相似的字符串 | 深度优先搜索 ,广度优先搜索 ,并查集 ,字符串 |
困难 | |
118 | 多余的边 | 深度优先搜索 ,广度优先搜索 ,并查集 ,图 |
中等 | |
119 | 最长连续序列 | 并查集 ,数组 ,哈希表 |
中等 |
著作权归 GitHub 开源社区 Doocs 所有,商业转载请联系 @yanglbme 获得授权,非商业转载请注明出处。