本项目为《剑指offer》第二版,作者源码(C++版)的python3实现。
第2章 面试需要的基础知识
2.2 编程语言
面试题1 赋值运算符函数 P25
面试题2 实现单例模式 P32
2.3 数据结构
面试题3 数组中重复的数字 P39
面试题4 二维数组中的查找 P44
面试题5 替换空格 P51
面试题6 从尾到头打印链表 P58
面试题7 重建二叉树 P62
面试题8 二叉树的下一个节点 P65
面试题9 用两个栈实现队列 P69
2.4 算法和数据操作
面试题10 斐波那契数列 P74
面试题11 旋转数组的最小数字 P82
面试题12 矩阵中的路径 P89
面试题13 机器人的运动范围 P92
面试题14 剪绳子 P96
面试题15 二进制中1的个数 P100
第3章 高质量的代码
3.3 编程语言
面试题16 数值的整数次方 P110
面试题17 打印从1到最大的n位数 P112
面试题18 删除链表的节点 P119
面试题19 正则表达式匹配 P124
面试题20 表示数值的字符串 P127
面试题21 调整数组顺序使奇数位于偶数前面 P129
3.4 代码的鲁棒性
面试题22 链表中倒数第k个节点 P134
面试题23 链表中环的入口节点 P139
面试题24 反转链表 P142
面试题25 合并两个排序的链表 P145
面试题26 树的子结构 P148
第4章 解决面试题的思路
4.2 画图让抽象问题形象化
面试题27 二叉树的镜像 P157
面试题28 对称的二叉树 P159
面试题29 顺时针打印矩阵 P161
4.3 举例让抽象问题具体化
面试题30 包含min函数的栈 P165
面试题31 栈的压入、弹出序列 P168
面试题32 从上到下打印二叉树 P171
面试题33 二叉搜索树的后序遍历序列 P179
面试题34 二叉树中和为某一值的路径 P182
4.4 分解放复杂问题简单化
面试题35 复杂链表的复制 P187
面试题36 二叉搜索树与双向链表 P191
面试题37 序列化二叉树 P194
面试题38 字符串的排列 P197
第5章 优化时间和空间效率
5.2 时间效率
面试题39 数组中出现次数超过一半的数字 P205
面试题40 最小的k个数 P209
面试题41 数据流中的中位数 P214
面试题42 连续子数组的最大和 P218
面试题43 1~n整数中1出现的次数 P221
面试题44 数字序列中某一位的数字 P225
面试题45 把数组排成最小的数 P227
面试题46 把数字翻译成字符串 P231
面试题47 礼物的最大价值 P233
面试题48 最长不含重复字符的子字符串 P236
5.3 时间效率与空间效率的平衡
面试题49 丑数 P240
面试题50 第一个只出现一次的字符 P243
面试题51 数组中的逆序对 P249
面试题52 两个链表的第一个公共节点 P253
第6章 面试中的各项能力
6.3 知识迁移能力
面试题53 在排序数组中查找数字 P263
面试题54 二叉搜索树的第k大节点 P269
面试题55 二叉树的深度 P271
面试题56 数组中数字出现的次数 P275
面试题57 和为s的数字 P280
面试题58 翻转字符串 P284
面试题59 队列的最大值 P288
6.4 抽象建模能力
面试题60 n个骰子的点数 P294
面试题61 扑克牌中的顺子 P298
面试题62 圆圈中最后剩下的数字 P300
面试题63 股票的最大利润 P304
6.5 发散思维能力
面试题64 求1+2+…+n P307
面试题65 不用加减乘除做加法 P310
面试题66 构建乘积数组 P312
第7章 两个面试案例
7.1 案例一
面试题67 把字符串转换成整数 P318
7.2 案例二
面试题68 树中两个节点的最低公共祖先 P326