昨天我参加了一个面试。他给了我几个编程问题要解决。当我解决它们时,面试官说可以以更好的时间复杂度来完成。我非常沮丧,以至于我无法以最佳时间复杂度完成该程序。最后我无法通过面试过程。但我想知道的是,我们如何才能在最佳时间解决任何问题?我应该采取什么方法来达到这种状态?我知道完美的答案是练习。但是我仍然想知道如何以及以什么方式来执行一个程序,以便它在更短的时间内运行并使用最好的内存。我必须读什么书?我要练习什么问题?
PS:我知道这不是技术问题。但请让我知道我该怎么做。
昨天我参加了一个面试。他给了我几个编程问题要解决。当我解决它们时,面试官说可以以更好的时间复杂度来完成。我非常沮丧,以至于我无法以最佳时间复杂度完成该程序。最后我无法通过面试过程。但我想知道的是,我们如何才能在最佳时间解决任何问题?我应该采取什么方法来达到这种状态?我知道完美的答案是练习。但是我仍然想知道如何以及以什么方式来执行一个程序,以便它在更短的时间内运行并使用最好的内存。我必须读什么书?我要练习什么问题?
PS:我知道这不是技术问题。但请让我知道我该怎么做。
关于算法、数据结构、时间和空间复杂性的最佳书籍之一是《算法导论》。我还可以建议您阅读以下书籍,以便为面试做好准备:
解决这类问题需要练习,再加上“看窍门”。对于这个特定示例,您可能会注意到 ,所有元素相乘的乘积B[i] = P/A[i]
在哪里。因此,在这种情况下,O(n) 性能来自首先计算一次(n-1 次乘法),然后计算每个(另外 n 次除法)。P
A[i]
P
B[i]
有时,“看花招”的最佳方法是在您使用的算法中寻找重复的模式。对于您的示例,请注意,在您的描述中,您实际上输入了"A[2] * A[3] ... A[n-1]"
两次字符串,所以这是一种思考“我可以在算法中只做一次这件事”的地方。