我試圖通過解決Codality問題來提高我的技能。我達到了這個一個:https://codility.com/programmers/lessons/9-maximum_slice_problem/max_double_slice_sum/解決MaxDouble切片Kadane的算法變化
我其實理論上百思不得其解:
- 使用Kadane的算法的陣列和存儲和各項指標的。
- 顛倒數組並執行相同操作。
- 通過一次循環兩個結果集來找出兩者之和的最大值。
- 最大值是最大雙切片。
我的問題不在於如何解決問題。我的問題是關於如何設想這將成爲解決這個問題的方法。有跡象表明,需要進行使用的AT-至少3級不同的概念:
的理解是,如果該數組中的所有元素都爲正,或負的這是一個不同的情況下,當有一些正和負比數組中的元素。
Kadane的算法
去陣列上向前和扭轉。
儘管如此,Codality已將此問題標記爲「無痛」。
我的問題是我錯過了什麼?我很難在不知道這些概念的情況下解決這個問題。
有沒有一種技術,我可以從頭開始,非常基本的概念,並根據解決這個問題所需的概念。還是在開始解決問題之前,我期望知道這些概念?
我該如何準備我的自我解決這些問題,因爲我不知道未來需要的概念?
謝謝。你說:「它首先將一個切片定義爲一個三元組(x,y,z),它定義在從x + 1開始,以z-1結束並且不包含y的元素之和。 現在,如果數組是2,3,4,5,6,7,那麼最大子數組就是整個數組。最大的子數組也是整個數組。所以它不會考慮上述第一個和最後一個元素的丟棄要求。 (或者我沒有正確理解某些東西?) 這不是一般算法無法處理的特例嗎? –
@KhojBadami我不明白。根據你的原始定義和簡化定義,這個例子的答案是什麼?無論哪種方式,即使它以某種方式得到了錯誤,重要的是現在你有一個主要工作的解決方案,給予或採取一些邊緣情況。現在,您可以專注於如何處理這些邊緣案例:分別識別和處理它們,或者通過調整您的解決方案來處理它們。不要從邊緣案例開始開發解決方案。 – IVlad
好的,「不要從邊緣案例開始開發解決方案。」這是我認爲是我的問題。正如你剛纔所說,我正在提出的問題比它需要的更復雜。需要按照您的解釋進行簡化。謝謝。 –