【发布时间】:2012-07-28 19:16:13
【问题描述】:
昨天我参加了一个面试。他给了我几个编程问题要解决。当我解决它们时,面试官说可以以更好的时间复杂度来完成。我非常沮丧,以至于我无法以最佳时间复杂度完成程序。最后我无法通过面试过程。但我想知道的是,我们如何才能在最佳时间解决任何问题?我应该采取什么方法来达到这种状态?我知道完美的答案是实践。但是我仍然想知道如何以及以什么方式来执行一个程序,以便它在更短的时间内运行并使用最好的内存。我必须读什么书?我必须练习什么问题?
P.S:我知道这不是技术问题。但请告诉我该怎么做。
【问题讨论】:
-
你能举个例子吗?也许他不雇用的原因是其他原因?很难说。
-
您知道解决问题的最佳方法取决于问题,对吗?没有千篇一律的解决方案。不,甚至没有 jQuery。
-
@AndersK 有两个数组说 B[],A[]。这两个都是大小为 n 的。现在我需要计算 B[0 到 n-1] 使得 B[0] = A[1] * A[2] * A[3] ... A[n-1] B[1] = A[ 0] * A[2] * A[3] ... A[n-1] 以此类推。也就是说,对于每个索引为 0 到 n 的 B 数组,我需要对 A[] 数组进行乘法运算,除了我们正在计算的索引为 B 的元素。我在 O(n^2) 中完成了这个,他告诉我可以在 O(n) 中完成。想不通怎么办?同样还有几个问题。
-
你必须学会更好地应对这类面试问题。期望某人知道每个问题的“最佳”算法是不合理的,所以一个理性的面试官没有这样的期望,你也不应该有这样的期望。我有理由期望候选人了解一组(小)核心问题(排序、搜索、特定领域的东西(在我的情况下是数字运算)...)的最佳算法(注意复数)并能够将他们的算法知识应用于新问题,例如在面试中遇到的问题。
-
@Amarnath,您可以将值 A[0]*A[1]*..*A[n-1] 赋值给一个名为
mulA的变量,然后对于每个 i 从 0 到n - 1,您可以分配 B[i] 等于mulA/A[i]。mulA的计算可以在O(n)中完成,后面的部分需要另一个O(n)复杂性。而O(n)+O(n)实际上是O(n)。
标签: algorithm data-structures time-complexity