給定乙個整數陣列 nums ,找到乙個具有最大和的連續子陣列(子陣列最少包含乙個元素),返回其最大和。
高階:如果你已經實現複雜度為 o(n) 的解法,嘗試使用更為精妙的分治法求解。
方法1:暴力破解法
列舉出陣列的所有子陣列,逐個比較大小,求得最小值
class
solution
if(a==false)
*/for(
int i=
0;i)for
(int j=i;j}return max;}}
;
不加注釋的地方也可通過,時間在500ms左右
注釋的地方是判斷子陣列第乙個元素為負數,加上可以將時間提到200ms左右,但是這樣會產生新的問題:如果陣列元素全為負數,便無法得到解。
於是又在前面加了一段應對這種情況的方法,若元素全為負便直接返回最大值
時間複雜度:o(n^2)
空間複雜度:o(1)
方法2:貪心演算法
貪心演算法比較簡單,只需遍歷一遍陣列。
取當前元素位置的最大和,並用max變數記錄最大和,若出現當前最大和為負值,則重新開始取最大和
class
solution
return max;}}
;
效率有極大提高
時間複雜度:o(n)
空間複雜度:o(1)
方法3:動態規劃
用乙個陣列dp儲存以當前元素結尾的最大子序和,也是只需遍歷一次陣列
dp[i] = max(dp[i-1] + nums[i], num[i]);
暫未程式設計實現
方法4:分治法
leetcode最大子序和
給定乙個整數陣列nums,找到乙個具有最大和的連續子陣列 子陣列最少包含乙個元素 返回其最大和。示例 輸入 2,1,3,4,1,2,1,5,4 輸出 6解釋 連續子陣列 4,1,2,1 的和最大,為 6。高階 如果你已經實現複雜度為 o n 的解法,嘗試使用更為精妙的分治法求解。在本題中,我想到的兩...
Leetcode 最大子序和
題目描述 給定乙個整數陣列nums,找到乙個具有最大和的連續子陣列 子陣列最少包含乙個元素 返回其最大和。示例 輸入 2,1,3,4,1,2,1,5,4 輸出 6解釋 連續子陣列 4,1,2,1 的和最大,為 6。高階 如果你已經實現複雜度為 o n 的解法,嘗試使用更為精妙的分治法求解。解題思路 ...
LeetCode 最大子序和
給定乙個整數陣列nums,找到乙個具有最大和的連續子陣列 子陣列最少包含乙個元素 返回其最大和。input 2,1 3,4,1 2,1 5,4 output 6動態規劃 python class solution def maxsubarray self,nums int tmp nums 0 ma...