2012-07-31 117 views
4

昨天我參加了面試。他給了我很少的編程問題來解決。當我解決他們時,採訪者表示可以在更好的時間複雜度下完成。我非常沮喪,以至於我無法在最佳時間複雜度下完成這個項目。最後,我無法完成面試過程。但是我想知道的是,我們如何在最佳時間做任何問題?我應該採取什麼措施來達到這個狀態?我知道完美的答案是練習。但是我仍然想知道如何做一個程序,以便在更短的時間內運行並使用最好的內存。我必須閱讀哪些書?我需要練習哪些問題?如何減少時間的複雜性

P.S:我知道這不是一個技術問題。但請讓我知道我該怎麼做。

+0

你能舉個例子嗎?也許他沒有聘請的原因是另一些?很難說。 – 2012-07-31 04:35:30

+0

您知道問題**的最佳方法取決於問題**,對嗎?沒有餅乾解決方案。不,甚至沒有jQuery。 – cHao 2012-07-31 04:42:55

+0

@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 2012-07-31 04:44:25

回答

3

解決這類問題涉及到實踐,再加上「看到的伎倆」。對於此特定示例,您可能會注意到B[i] = P/A[i],其中P是乘以所有A[i]元素的乘積。因此在這種情況下,O(n)的性能來自首先計算P一次(n-1次乘法),接着計算每個B[i](另外n個分部)。

有時候,「看到訣竅」的最好方法是在你使用的算法中尋找重複模式。舉例來說,請注意,在你的描述中,你實際上輸入了字符串"A[2] * A[3] ... A[n-1]"兩次,所以這是一種思考「我可以在算法中只做一次這個事情」的地方。

+0

謝謝。我認爲這是他在採訪中告訴我的,有一種模式看起來..看..看.. .. :( – Amarnath 2012-07-31 05:31:50