剑指Offer 目录

  • 注意事项

    • 判断输入是否合适,是否超出范围,是否为空,都要考虑齐全,
      求链表倒数第 k 个数,k小于0,链表长度小于 k 是否考虑周全
      求丑数第 k 个,k<0 是否考虑周全
    • 由于计算机表示小数 (包括 float 和 double 型小数) 都有误差,我们不能直接用等号 ( == ) 判断两个小数是否相等。如果两个小数的差的绝对值很小,如小于 0.0000001,就可以认为它们相等
  • 面试官在检查与字符串相关的代码时经常会发现两种问题

    • 1、输入空指针 nullptr 时程序会崩溃
    • 2、内存访问越界的问题,也就是试图访问不属于字符串的内存

高质量的代码

1,代码规范性: 书写清晰,布局清晰,命名合理
应聘者在写代码的时候,最好用完整的英文单词组合命名变量和函数,以便面试官能一眼读懂代码的意图
2,代码完整性
在面试过程中,面试官会非常关注应聘者考虑问题是否周全。面试官通过检查代码是否完整来考查应聘者的思维是否全面。通常面试官会检查应聘者的代码是否完成了基本功能,输入边界值是否能得到正确的输出,是否对各种不规范的非法输入做出了合理的错误处理

查找与排序

查找相对而言较为简单。有 顺序查找,二分查找,哈希表查找,二叉排序树查找
排序比查找复杂一些。面试官会经常要求应聘者比较插入排序,冒泡排序,归并排序,快速排序等不同算法的优劣。强烈建议应聘者在准备面试的时候,一定要对各种排序算法的特点烂熟于胸,能够从额外空间消耗,平均时间复杂度和最差时间复杂度等方面去比较它们的优缺点

数字

二分查找

数组

思路:哈希表 map

字符串

链表

递归 / 循环

回溯法

动态规划

位运算

把一个整数减去 1 之后再和原来的整数做位与运算,得到的结果相当于把整数的二进制表示中最右边的 1 变成 0。(很多二进制问题都可以用这种思路解决)
位运算包括5种运算:与(&),或(|),异或(^),左移(<<),右移(>>)
把整数右移一位和把整数除以2在数学上是等价的,但是效率上,除法运算效率比移位运算低得多,在实际编程中应尽可能地用移位运算符代替乘除法

二叉树

与二叉树相关的代码有大量的指针操作,在每次使用指针的时候,我们都要问自己这个指针有没有可能是 NULL,如果是 NULL 则该怎么处理

栈 / 队列

海量数据

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容