第1章 面试的流程
第2章 面试需要的基础知识
第3章 高质量的代码
第4章 解决面试题的思路
第5章 优化时间和空间效率
第6章 面试中的各项能力
第7章 两个面试案例
文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
5.4 本章小结
编程面试的时候,面试官通常对时间复杂度和空间复杂度都会有要求,并且一般情况下面试官更加关注时间复杂度。
降低时间复杂度的第一个方法是改用更加高效的算法。比如我们用动态规划解答面试题31连续子数组的最大和能够把时间复杂度降低到O(n),利用快速排序的Partition函数也能在O(n)时间解决面试题29数组中出现次数超过一半的数字和面试题30最小的k个数字。
降低时间复杂度的第二个方法是用空间换取时间。在解决面试题35第一个只出现一次的字符的时候,我们用数组实现一个简单的哈希表,于是用O(1)时间就能知道任意字符出现的次数。这种思路可以解决很多同类型的题目。另外,我们可以创建一个缓存保存中间的计算结果,从而避免重复的计算。面试题34丑数就是这方面的一个例子。在用递归的思路求解问题的时候,如果有重复的子问题,同样我们也可以通过保存求解子问题的结果来避免重复计算。更多关于递归的讨论请参考本书的2.4.2节及面试题9斐波那契数列。
值得注意的是,以空间换取时间并不一定都是可行的方案。我们要注意需要的辅助空间的大小,消耗太多的内存可能得不偿失。另外,我们还要关注问题的背景。如果面试题是有关嵌入式开发的,那对空间消耗就要格外留心,因为通常嵌入式系统的内存很有限。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论