常規的暴力解法,所有排列組合情況試一遍,時間複雜度為o(n^2)
以leetcode的測試集來看,效率最高的是貪心法。從開頭到結尾依次加,如果sum<0了,那麼求和器sum歸零。時間複雜度為o(n)。
**如下
1//貪心法
2class
solution
11return
ret;12}
13 };
比較經典的解法有動態規劃和分治法。時間複雜度都為o(n)。其中dp效率還不錯且實現簡單。但分治法實現比較複雜,效率也略微不如dp。
dp的思路為從區域性最優解逐步向全域性最優解靠近。
以下為dp法**
1//dp法
2class
solution
12return
res;13}
14 };
分治法思路是,取中間節點,最大子串行要麼都在左邊,要麼都在右邊,要麼是跨中點的。對於跨中點的情況,用暴力法從中點向兩邊求和,分別求出左段以中點為結尾的最大子串行和以及右段以中點為起點的最大子串行和,兩者相加。
遞迴回來後,從三種情況中選最大值。實現方法略。
雖然分治法在效率和實現上不如dp。但分治法的優點是,可以查詢任意區間[l,r]的最大子串行和,在構造整個遞迴樹結構之後,後續的查詢代價僅為o(logn),這在實際應用中更有意義。
LeetCode53最大子序和
給定乙個序列 至少含有 1 個數 從該序列中尋找乙個連續的子串行,使得子串行的和最大。例如,給定序列 2,1,3,4,1,2,1,5,4 連續子串行 4,1,2,1 的和最大,為6。擴充套件練習 若你已實現複雜度為 o n 的解法,嘗試使用更為精妙的分治法求解。一開始用的最簡單最直接的方法,挨個的把...
LeetCode 53 最大子序和
給定乙個整數陣列nums,找到乙個具有最大和的連續子陣列 子陣列最少包含乙個元素 返回其最大和。示例 輸入 2,1,3,4,1,2,1,5,4 輸出 6 解釋 連續子陣列 4,1,2,1 的和最大,為 6。高階 如果你已經實現複雜度為 o n 的解法,嘗試使用更為精妙的分治法求解。這道題本來是能做出...
LeetCode 53 最大子序和
題目鏈結 題目描述 給定乙個整數陣列 nums 找到乙個具有最大和的連續子陣列 子陣列最少包含乙個元素 返回其最大和。示例輸入 2,1,3,4,1,2,1,5,4 輸出 6 解釋 連續子陣列 4,1,2,1 的和最大,為 6。解決方法 解題思路 動態規劃,複雜度為 o n 令dp i 表示最後一項為...