返回介绍

第1章 面试的流程

第2章 面试需要的基础知识

第3章 高质量的代码

第4章 解决面试题的思路

第5章 优化时间和空间效率

第6章 面试中的各项能力

第7章 两个面试案例

5.4 本章小结

发布于 2024-08-21 20:57:09 字数 561 浏览 0 评论 0 收藏 0

编程面试的时候,面试官通常对时间复杂度和空间复杂度都会有要求,并且一般情况下面试官更加关注时间复杂度。

降低时间复杂度的第一个方法是改用更加高效的算法。比如我们用动态规划解答面试题31连续子数组的最大和能够把时间复杂度降低到O(n),利用快速排序的Partition函数也能在O(n)时间解决面试题29数组中出现次数超过一半的数字和面试题30最小的k个数字。

降低时间复杂度的第二个方法是用空间换取时间。在解决面试题35第一个只出现一次的字符的时候,我们用数组实现一个简单的哈希表,于是用O(1)时间就能知道任意字符出现的次数。这种思路可以解决很多同类型的题目。另外,我们可以创建一个缓存保存中间的计算结果,从而避免重复的计算。面试题34丑数就是这方面的一个例子。在用递归的思路求解问题的时候,如果有重复的子问题,同样我们也可以通过保存求解子问题的结果来避免重复计算。更多关于递归的讨论请参考本书的2.4.2节及面试题9斐波那契数列。

值得注意的是,以空间换取时间并不一定都是可行的方案。我们要注意需要的辅助空间的大小,消耗太多的内存可能得不偿失。另外,我们还要关注问题的背景。如果面试题是有关嵌入式开发的,那对空间消耗就要格外留心,因为通常嵌入式系统的内存很有限。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文