分治法的原理
分治算法的基本思想是將一個規模為N的問題分解為K個規模較小的子問題,這些子問題相互獨立且與原問題性質相同。求出子問題的解,就可得到原問題的解。即一種分目標完成程序算法,簡單問題可用二分法完成。(來自度娘的搬運工)
簡單的說,分治就是分而治之,把一個問題拆分成幾個小問題,最后再匯總解決的辦法。
有兩點需要記住:
(1) 分治法基本思想是將一個規模為n的問題分解為k個規模較小的子問題,這些子問題相互獨立且與原問題相同。
(2)遞歸的解這些子問題,然后將各子問題的解合並得到原問題的解。
分治法的重點是分析問題是否可以划分為規模較小的子問題,難點是如何划分以及划分之后如何將各個子問題的解合並成最終的解。這一般需要用到數學知識或者其他理論。
以下是兩種解決方案
1、定義兩個變量res和curSum,其中res保存最終要返回的結果,即最大的子數組之和,curSum初始值為0,每遍歷一個數字num,比較curSum + num和num中的較大值存入curSum,然后再把res和curSum中的較大值存入res,以此類推直到遍歷完整個數組,可得到最大子數組的值存在res中
2、用分治法Divide and Conquer Approach來解,這個分治法的思想就類似於二分搜索法,我們需要把數組一分為二,分別找出左邊和右邊的最大子數組之和,然后還要從中間開始向左右分別掃描,求出的最大值分別和左右兩邊得出的最大值相比較取最大的那一個