Lintcode42 Maximum Subarray II solution 題解

【題目描述】
數組

Given an array of integers, find two non-overlapping subarrays which have the largest sum.The number in each subarray should be contiguous.Return the largest sum.app

Notice:The subarray should contain at least one numberide

給定一個整數數組,找出兩個 不重疊 子數組使得它們的和最大。每一個子數組的數字在數組中的位置應該是連續的。返回最大的和。源碼分析

注意:子數組最少包含一個數spa

【題目連接】code

http://www.lintcode.com/en/problem/maximum-subarray-ii/
orm

【題目解析】索引

嚴格來說這道題這道題也能夠不用動規來作,這裏仍是採用經典的動規解法。Maximum Subarray 中要求的是數組中最大子數組和,這裏是求不相重疊的兩個子數組和的和最大值,作過買賣股票系列的題的話這道題就很是容易了,既然咱們已經求出了單一子數組的最大和,那麼咱們使用隔板法將數組一分爲二,分別求這兩段的最大子數組和,求相加後的最大值即爲最終結果。隔板前半部分的最大子數組和很容易求得,可是後半部分難道須要將索引從0開始依次計算嗎?NO!!! 咱們能夠採用從後往前的方式進行遍歷,這樣時間複雜度就大大下降了。get

源碼分析:前向搜索和逆向搜索咱們使用私有方法實現,可讀性更高。注意是求非重疊子數組和,故求maxTwoSub時i 的範圍爲0, size - 2, 前向數組索引爲 i, 後向索引爲 i + 1.源碼

複雜度分析:前向和後向搜索求得最大子數組和,時間複雜度 O(2n)=O(n)O(2n)=O(n)O(2n)=O(n), 空間複雜度 O(n)O(n)O(n). 遍歷子數組和的數組求最終兩個子數組和的最大值,時間複雜度 O(n)O(n)O(n). 故總的時間複雜度爲 O(n)O(n)O(n), 空間複雜度 O(n)O(n)O(n).

【參考答案】

http://www.jiuzhang.com/solutions/maximum-subarray-ii/

相關文章
相關標籤/搜索