昨天我参加了面试。他给了我很少的编程问题要解决。当我解决它们时,采访者说它可以在更好的时间复杂度下完成。我非常沮丧,以至于无法以最佳时间复杂度完成该计划。最后,我无法完成面试过程。但我想知道的是我们如何才能在最佳时间内解决任何问题?我应该采取什么方法来达到这个状态?我知道完美的答案是练习。但我仍然想知道如何以及以何种方式执行程序,以便在更短的时间内运行并使用最佳内存。我要读什么书?我有什么问题需要练习?
P.S:我知道这不是一个技术问题。但是,请让我知道我该怎么做。
答案 0 :(得分:6)
关于算法,数据结构,时间和空间复杂性的最佳书籍之一是Introduction to Algorithms。我还建议你阅读以下书籍,以便为面试做好准备:
答案 1 :(得分:3)
解决这类问题需要练习,再加上“看到诀窍”。对于此特定示例,您可能会注意到B[i] = P/A[i]
,其中P
是所有A[i]
元素相乘的乘积。因此,在这种情况下,O(n)性能来自首先计算P
一次(n-1次乘法),然后计算每个B[i]
(另外n个除法)。
有时,“看到诀窍”的最佳方式是在您使用的算法中查找重复的模式。对于您的示例,请注意您在描述中实际上键入了字符串"A[2] * A[3] ... A[n-1]"
两次,因此这是一种思考的地方“我能在算法中只执行一次这样的事情。”
答案 2 :(得分:1)
阅读大量算法并练习它们。
解决在线评委的问题也有助于提高解决问题技巧的效率和准确性。
下面列出了一些评委: