下面的三本书的代码都是用
JAVA
语言编写,在参考前人代码的基础上,结合了自己的一些理解,整理出C++
版代码。
一、剑指Offer(专项突破版)(已完结)
介绍
- 新版剑指Offer删掉了原版中的关于面试流程以及面试官心理的描写,虽然只是寥寥十几页,但感觉还是有价值的,因为之前我在面试阿里,手撕
atoi()
时就踩了一模一样的坑; - 新版书中是用
JAVA
语言写的,这里代码用C++
改写; - 新版对题目进行了归类,比如:栈、链表、树等,由浅入深,逐个突破。
- 共354页,力扣上有配套题目练习。
题目
剑指 Offer II 001. 整数除法
剑指 Offer II 002. 二进制加法
剑指 Offer II 003. 前 n 个数字二进制中 1 的个数
剑指 Offer II 002. 二进制加法
剑指 Offer II 004. 只出现一次的数字
剑指 Offer II 005. 单词长度的最大乘积
剑指 Offer II 006. 排序数组中两个数字之和
剑指 Offer II 007. 数组中和为 0 的三个数
剑指 Offer II 008. 和大于等于 target 的最短子数组
剑指 Offer II 009. 乘积小于 K 的子数组
剑指 Offer II 010. 和为 k 的子数组
剑指 Offer II 011. 0 和 1 个数相同的子数组
剑指 Offer II 012. 左右两边子数组的和相等
剑指 Offer II 013. 二维子矩阵的和
剑指 Offer II 014. 字符串中的变位词
剑指 Offer II 015. 字符串中的所有变位词
剑指 Offer II 016. 不含重复字符的最长子字符串
剑指 Offer II 017. 含有所有字符的最短字符串(最小覆盖子串)
剑指 Offer II 018. 有效的回文
剑指 Offer II 019. 最多删除一个字符得到回文
剑指 Offer II 020. 回文子字符串的个数
剑指 Offer II 021. 删除链表的倒数第 n 个结点
剑指 Offer II 022. 链表中环的入口节点
剑指 Offer II 023. 两个链表的第一个重合节点
剑指 Offer II 025. 链表中的两数相加
剑指 Offer II 026. 重排链表
剑指 Offer II 027. 回文链表
剑指 Offer II 028. 展平多级双向链表(DFS)
剑指 Offer II 029. 排序的循环链表
剑指 Offer II 030. 插入、删除和随机访问都是 O(1) 的容器(哈希表)
剑指 Offer II 031. 最近最少使用缓存(LRU)
剑指 Offer II 032. 有效的变位词
剑指 Offer II 033. 变位词组(哈希表)
剑指 Offer II 034. 外星语言是否排序(哈希表)
剑指 Offer II 035. 最小时间差(哈希表)
剑指 Offer II 036. 后缀表达式(栈)
剑指 Offer II 037. 小行星碰撞(数组模拟栈)
剑指 Offer II 038. 每日温度(单调栈)
剑指 Offer II 039. 直方图最大矩形面积
剑指 Offer II 040. 矩阵中最大的矩形
剑指 Offer II 041. 滑动窗口的平均值
剑指 Offer II 042. 最近请求次数
剑指 Offer II 043. 往完全二叉树添加节点(层序遍历)
剑指 Offer II 044. 二叉树每层的最大值(层序遍历)
剑指 Offer II 045. 二叉树最底层最左边的值(层序遍历)
剑指 Offer II 046. 二叉树的右侧视图(层序遍历)
剑指 Offer II 047. 二叉树剪枝(递归)
剑指 Offer II 049. 从根节点到叶节点的路径数字之和
剑指 Offer II 048. 序列化与反序列化二叉树(带空节点的前序遍历)
剑指 Offer II 049. 从根节点到叶节点的路径数字之和
剑指 Offer II 050. 向下的路径节点之和(DFS+哈希)
剑指 Offer II 051. 节点之和最大的路径(后序遍历)
剑指 Offer II 052. 展平二叉搜索树(中序遍历)
剑指 Offer II 053. 二叉搜索树中的中序后继
剑指 Offer II 054. 所有大于等于节点的值之和(颠倒中序遍历)
剑指 Offer II 055. 二叉搜索树迭代器
剑指 Offer II 056. 二叉搜索树中两个节点之和
剑指 Offer II 057. 值和下标之差都在给定的范围内(桶)
剑指 Offer II 058. 日程表
剑指 Offer II 059. 数据流的第 K 大数值
剑指 Offer II 060. 出现频率最高的 k 个数字
剑指 Offer II 061. 和最小的 k 个数对(多路归并)
剑指 Offer II 062. 实现前缀树(智能指针防内存泄漏)
剑指 Offer II 063. 替换单词(前缀树)
剑指 Offer II 064. 神奇的字典(前缀树+DFS)
剑指 Offer II 065. 最短的单词编码(前缀树+DFS)
剑指 Offer II 066. 单词之和(前缀树+DFS)
剑指 Offer II 067. 最大的异或(前缀树+异或)
剑指 Offer II 068. 查找插入位置(二分)
剑指 Offer II 069. 山峰数组的顶部(二分)
剑指 Offer II 070. 排序数组中只出现一次的数字
剑指 Offer II 071. 按权重生成随机数(前缀和+二分)
剑指 Offer II 072. 求平方根
剑指 Offer II 073. 狒狒吃香蕉(二分)
剑指 Offer II 074. 合并区间
剑指 Offer II 075. 数组相对排序(计数排序)
剑指 Offer II 076. 数组中的第 k 大的数字(快速选择)
剑指 Offer II 077. 链表排序
剑指 Offer II 078. 合并排序链表(归并排序)
剑指 Offer II 079. 所有子集(DFS)
剑指 Offer II 080. 含有 k 个元素的组合(DFS)
剑指 Offer II 081. 允许重复选择元素的组合(DFS)
剑指 Offer II 082. 含有重复元素集合的组合(DFS+SET)
剑指 Offer II 083. 没有重复元素集合的全排列(DFS)
剑指 Offer II 084. 含有重复元素集合的全排列 (DFS)
剑指 Offer II 085. 生成匹配的括号(DFS)
剑指 Offer II 086. 分割回文子字符串(DFS)
剑指 Offer II 087:复原IP(DFS)
剑指 Offer II 088:爬楼梯的最少成本(DP)
剑指 Offer II 089:房屋偷盗(DP)
剑指 Offer II 090:环形房屋偷盗(DP)
剑指 Offer II 091. 粉刷房子(DP)
剑指 Offer II 092:翻转字符(DP)
剑指 Offer II 093:最长斐波那契数列(DP)
剑指 Offer II 094. 最少回文分割(DP)
剑指 Offer II 095:最长公共子序列(DP)
剑指 Offer II 096. 字符串交织(DP)
剑指 Offer II 097. 子序列的数目(DP)
剑指 Offer II 098. 路径的数目(DP)
剑指 Offer II 099. 最小路径之和(DP)
剑指 Offer II 100. 三角形中最小路径之和(DP)
剑指 Offer II 101. 分割等和子集(01背包问题)
剑指 Offer II 102:加减的目标值(DP)
剑指 Offer II 103. 最少的硬币数目(DP)
剑指 Offer II 104. 排列的数目(DP)
剑指 Offer II 105. 岛屿的最大面积(BFS+DFS解法)
剑指 Offer II 106. 二分图(BFS+DFS解法)
剑指 Offer II 107. 矩阵中的距离(BFS)
剑指 Offer II 108. 单词演变(BFS)
剑指 Offer II 109. 开密码锁(BFS)
剑指 Offer II 110. 所有路径(DFS)
剑指 Offer II 111. 计算除法(图+DFS)
剑指 Offer II 112. 最长递增路径(DFS)
剑指 Offer II 113. 课程顺序(拓扑排序)
剑指 Offer II 114. 外星文字典(图 + 拓扑排序)
剑指 Offer II 115. 重建序列(图 + 拓扑排序)
剑指 Offer II 116. 省份数量(并查集)
剑指 Offer II 117. 相似的字符串(并查集)
剑指 Offer II 118. 多余的边(并查集)
剑指 Offer II 119. 最长连续序列(DFS、BFS、并查集)
二、程序员代码面试指南(更新ing)
介绍
- 跟新版剑指Offer类似,全书用
JAVA
语言编写,难度比前者稍大,同样用C++
改写; - 每个题解都写得及其详细,带着读者逐步模拟算法执行的过程;
- 共562页,牛客网上有配套题目练习。
题目
程序员代码面试指南 1.1:设计getMin功能的栈
程序员代码面试指南 1.2:由两个栈组成的队列
程序员代码面试指南 1.3:用递归函数和栈逆序一个栈
程序员代码面试指南 1.5:用一个栈实现另一个栈的排序
程序员代码面试指南 1.7:生成窗口最大值数组(双端队列模拟单调栈)
程序员代码面试指南 1.8:单调栈结构
程序员代码面试指南 1.9:求最大子矩阵的大小(单调栈)
程序员代码面试指南 1.10:最大值减去最小值小于或等于num的子数组数量(单调栈)
程序员代码面试指南 1.11:可见的山峰对数量(数学题)
程序员代码面试指南 2.1:打印两个升序链表的公共部分
程序员代码面试指南 2.2:在链表中删除倒数第K个节点
程序员代码面试指南 2.3:删除链表的中间节点
程序员代码面试指南 2.4:反转单链表与双链表
程序员代码面试指南 2.5:反转部分单向链表
程序员代码面试指南 2.6:环形链表的约瑟夫问题
程序员代码面试指南 2.7:判断一个链表是否为回文结构(进阶)
程序员代码面试指南 2.8:将单链表按值划分
程序员代码面试指南 2.10:两个单链表生成相加链表
程序员代码面试指南 2.12:将单链表的每K个节点之间逆序
程序员代码面试指南 2.13:删除无序链表中值重复出现的节点
程序员代码面试指南 2.14:在链表中删除指定值的节点
程序员代码面试指南 2.15:将搜索二叉树转换成双向链表
程序员代码面试指南 2.16:单链表的选择排序
程序员代码面试指南 2.17:一种怪异的节点删除方式
程序员代码面试指南 2.18:向有序的环形单链表中插入新节点
程序员代码面试指南 2.19:合并两个有序的单链表
程序员代码面试指南 2.20:按照左右半区的方式重新组合单链表
程序员代码面试指南 3.1:分别用递归和非递归的方式实现二叉树先序、中序和后序遍历
程序员代码面试指南 3.4:二叉树的序列化和反序列化
程序员代码面试指南 3.5:遍历二叉树的神级方法(Morris前中后序遍历)
程序员代码面试指南 3.6:在二叉树中找到累加和为指定值的最长路径长度
程序员代码面试指南 3.7:找到二叉树中的最大搜索二叉子树(树形DP)
程序员代码面试指南 3.8:找到二叉树中符合搜索二叉树条件的最大拓扑结构
程序员代码面试指南 3.9:二叉树的按层打印与ZigZag打印
程序员代码面试指南 3.10:找到搜索二叉树中两个错误的节点
程序员代码面试指南 3.11:判断t1树是否包含t2树全部的拓扑结构
三、程序员面试金典(更新ing)
介绍
- 这是一本外国人写的针对外企(微软、亚马逊、谷歌、苹果、Facebook等公司)的面试指南,书中算法用
C++
语言编写; - 本书用
JAVA
语言编写,还介绍了外企面试流程、行为面试以及技术面试的技巧; - 共594页,目前还没有来得及仔细看,力扣上有配套题目练习。
题目
程序员面试金典 1.1:判定字符是否唯一(位运算)
程序员面试金典 1.2:判定是否互为字符重排
程序员面试金典 1.3:URL化
程序员面试金典 1.4:回文排列
程序员面试金典 1.5:一次编辑
程序员面试金典 1.6:字符串压缩
程序员面试金典 1.7:旋转矩阵(原地操作)
程序员面试金典 1.8:零矩阵(原地解法)
程序员面试金典 1.9. 字符串轮转
程序员面试金典 2.1:移除重复节点
程序员面试金典 2.2:返回倒数第 k 个节点(递归与非递归解法)
程序员面试金典 2.3:删除中间节点
程序员面试金典 2.4:分割链表(双指针)
程序员面试金典 2.5:链表求和
程序员面试金典 2.6:回文链表
程序员面试金典 2.7:链表相交(双指针)
程序员面试金典 2.8:环路检测(双指针找环入口的数学原理)
程序员面试金典 3.1:三合一
程序员面试金典 3.2:栈的最小值(辅助栈)
程序员面试金典 3.3:堆盘子(vector嵌套stack)
程序员面试金典 3.4:化栈为队
程序员面试金典 3.5:栈排序
程序员面试金典 3.6:动物收容所
程序员面试金典 4.1:节点间通路(DFS、BFS)
程序员面试金典 4.2:最小高度树(DFS)
程序员面试金典 4.3:特定深度节点链表
程序员面试金典 4.4:检查平衡性
程序员面试金典 4.5:合法二叉搜索树
程序员面试金典 4.6:后继者
程序员面试金典 4.8:首个共同祖先
程序员面试金典 4.9:二叉搜索树序列
程序员面试金典 4.10:检查子树
程序员面试金典 4.12:求和路径(DFS)
程序员面试金典 5.1:插入(位运算)
程序员面试金典 5.2:二进制数转字符串
程序员面试金典 5.3:翻转数位
程序员面试金典 5.6:整数转换(位运算)
程序员面试金典 5.7:配对交换(位运算)
感谢老哥分享!
佬下面两本全部更新完了嘛
我第一本都还没写完哈哈,三本书一边看一边写呢,趁最近有空多做做题。