給定乙個整數陣列 nums ,找到乙個具有最大和的連續子陣列(子陣列最少包含乙個元素),返回其最大和。
示例:輸入: [-2,1,-3,4,-1,2,1,-5,4],
輸出: 6
解釋: 連續子陣列 [4,-1,2,1] 的和最大,為 6。
這裡使用的是動態規劃的方法。
sums[i]表以nums[i]結尾的連續子串行的最大值
則有以下關係
s um
s[i]
=if
iis not 0
sums[i]= \begin nums[0] & \quad \text i \text\\ max\ & \quad \text i \text \end
sums[i
]=if
iis 0
if i
is not 0
*
動態規劃
sum[0]
= nums[0]
sum[i]
= max
時間複雜度為:o
(n)空間複雜度為:o
乙個序列的最大子序和出現的位置無非有三種:左邊序列,右邊序列,橫跨中間數字的序列,而對於左邊序列和右邊序列仍能進行遞迴考慮,將問題分解的更小,當只有乙個數時,返回這個數,
/*
分治法時間複雜度為:o(nlogn)
*/class
solution
int l_max_sum, r_max_sum, mid =
(beg + end)/2
;int l_sum, r_sum, sum;
l_max_sum =
maxsub
(nums, beg, mid)
;//遞迴求左邊序列的最大子串行
r_max_sum =
maxsub
(nums, mid +
1, end)
;//遞迴求右邊序列的最大子串行
sum =0;
l_sum = nums[mid]
;//求經過中間元素的最大子串行和
for(
int i = mid; i >= beg;
--i)
} sum =0;
r_sum = nums[mid +1]
;for
(int i = mid +
1; i <= end;
++i)
}return
max(l_max_sum,
max(r_max_sum, l_sum + r_sum));
//返回左、右、中之間最大的
力扣 53 最大子序和
題目描述 簡單 給定乙個整數陣列nums,找到乙個具有最大和的連續子陣列 子陣列最少包含乙個元素 返回其最大和。題目鏈結 示例 1 輸入 2,1,3,4,1,2,1,5,4 輸出 6解釋 連續子陣列 4,1,2,1 的和最大,為 6。演算法分析 設dp i 表示以第i個數結尾的子陣列的最大和,那麼只...
力扣53 最大子序和
給定乙個整數陣列 nums 找到乙個具有最大和的連續子陣列 子陣列最少包含乙個元素 返回其最大和。示例 輸入 2,1,3,4,1,2,1,5,4 輸出 6 解釋 連續子陣列 4,1,2,1 的和最大,為 6。法一 利用二級指標申請乙個二維陣列 a int malloc sizeof int m fo...
求最大子序和(力扣53)
給定乙個整數陣列 nums,找到乙個具有最大和的連續子陣列 子陣列最少包含乙個元素 返回其最大和。力扣原題鏈結 示例 輸入 2,1,3,4,1,2,1,5,4 輸出 6 解釋 連續子陣列 4,1,2,1 的和最大,為6 暴力求解 class solution return max 貪心法 當前和小於...