《剑指offer》读书笔记——第三章:高质量的代码
一、面试官谈代码质量
写代码不能只想到“正常值”情况的处理,需要考虑异常状况与资源回收。
二、代码的规范性
- 规范的代码书写清晰(这里说的是远古时期在纸上或者白板上写代码的情况)。
- 规范的代码布局清晰(同上)。
- 规范的代码命名合理(大驼峰、小驼峰)。
三、代码的完整性
面试官会关注应聘者考虑问题是否周全,考虑问题的顺序:基本功能->边界值->非法输入
1.从三个方面确保代码的完整性
- 功能测试:突破惯性思维的影响,看到全面的功能需求
- 边界测试:结束循环/递归的边界值是否正确
- 负面测试:考虑到各种可能的错误输入
2.三种处理错误的方法
- 函数返回值
- 全局变量
- 异常
- 面试题①:数值的整数次方
使用右移运算符>>代替除以2,用位与运算符&判断整数的奇偶。 - 面试题②:打印1到最大的n位数
需要考虑到大数问题,可以使用字符串 - 面试题③:在O(1)时间内删除链表节点
覆盖,删除 - 面试题④:调整数组顺序使奇数位于偶数前面
双指针
四、代码的鲁棒性
- 面试题①:链表中倒数第k个节点
快慢指针 - 面试题②:反转链表
维护三个指针,老经典题了 - 面试题③:合并两个排序列表
递归思想,注意对空链表进行特殊处理 - 面试题④:树的子结构
先序遍历树A的所有节点Na,然后判断Na为根的树中是否包含B
总结
编码过程中需要注意规范性,注意变量、函数的命名。
在编码之前考虑所有的输入情况,考虑好边界条件,做好错误处理。
为了确保程序不会崩溃,在函数的如靠判断输入的有效性并对无效输入进行处理。