剑指 Offer*
刷 leetcode 实在是太费劲了,还是先刷这个吧,功利一些。
刷 TMD!
刷了一部分 leetcode 的感觉不太行,有些细节似乎被去掉了,还是看书吧。
Tips*
- 代码的鲁棒性,考虑边界条件、特殊输入及错误处理。
- 通过画图、举例和分解使抽象复杂的问题具体化、简单化。
- C++ 关键字的理解,如类型转换、sizeof。
- 二分、归并、快排
- 回溯 递归、栈模拟
- 动态规划、贪心
题目总结*
| Problems | Discription |
|---|---|
| 01.赋值运算符函数 | 赋值运算符重载,内存泄漏问题。 |
| 03.数组中的重复数字 | 值在下标范围内,原地交换即可。 |
| 04.二维数组的查找 | 从右上或左下角开始搜索即可,也可以二分。 |
| 05.替换空格 | 原地修改,从后往前填充,类似的有合并有序数组。 |
| 06.从尾到头打印链表 | 迭代反转链表、头插法新建链表、栈。 |
| 07.重建二叉树 | 经典递归建树,迭代方法还没太整明白。 |
| 08.二叉树的下一个节点 | 右子树的最左结点或当前结点所在左子树的根结点。 |
| 09.用两个栈实现队列 | 输出栈空时把输入栈移到输出栈即可。 |
| 10.斐波那契数列 | 递归或迭代,或者使用矩阵快速幂计算。 |
| 11.旋转数组的最小数字 | 遍历或二分查找,考虑两端相等的情况。 |
| 12.矩阵中的路径 | dfs 回溯算法。 |
| 13.机器人的运动范围 | dfs 或 bfs。 |
| 14.剪绳子 | 动态规划,或者用数学思想 尽可能多的 3。 |
| 15.二进制中 1 的个数 | n & (n - 1) 的运算每次去掉最右侧的 1。 |
| 16.数值的整数次方 | 快速幂算法,处理好边界情况,浮点数判等不要用 ==。 |
| 17.打印从 1 到最大的 n 位数 | 字符串处理大数,或者递归全排列。 |
| 18.删除链表的结点 | 给定值只能遍历,给定非尾结点可以使用后继元素替换当前 |
| 19.正则表达式匹配 | 递归,动态规划 |
最后更新: July 23, 2022