給定乙個整數陣列 nums ,找到乙個具有最大和的連續子陣列(子陣列最少包含乙個元素),返回其最大和。
示例:法一:利用二級指標申請乙個二維陣列輸入: [-2,1,-3,4,-1,2,1,-5,4],
輸出: 6
解釋: 連續子陣列 [4,-1,2,1] 的和最大,為 6。
a=
(int**
)malloc
(sizeof
(int*)
*m);
for(i=
0;i) a[i]=(
int*
)malloc
(sizeof
(int
)*n)
;for
(i=0
;ifor(i=
0;i)free
(a[i]);
free
(a);
法二:用陣列指標形式申請乙個二維陣列
//申請乙個3行2列的整型陣列
int(
*a)[2]
=(int(*)
[2])
malloc
(sizeof
(int)*
3*2)
;for
(i=0
;i<
3;i++)}
free
(a);
法三:用乙個單獨的一維陣列來模擬二維陣列
array=
(int*)
malloc
(nrows*ncolumns*
sizeof
(int))
;//申請記憶體空間
for(i=
0;i)printf
("\n");
}
利用二維陣列,a[i][i]儲存當前開始的連續子串行的第乙個元素nums[i],然後把以nums[i]起始,以nums[j]結尾的子串行和全部儲存在a[i][j]中,i存放起始元素下標,j存放結束元素下標
有點類似於氣泡排序的迴圈法
int
maxsubarray
(int
* nums,
int numssize)
}int max=a[0]
[0];
for(
int i=
0;ireturn max;
}
貪心法
每一步都選擇最佳方案,到最後就是全域性最優的方案。
演算法:該演算法通用且簡單:遍歷陣列並在每個步驟中更新:
python解法:
class
solution
:def
maxsubarray
(self, nums:
'list[int]')-
>
'int'
: n =
len(nums)
curr_sum = max_sum = nums[0]
for i in
range(1
, n)
: curr_sum =
max(nums[i]
, curr_sum + nums[i]
) max_sum =
max(max_sum, curr_sum)
return max_sum
力扣 53 最大子序和
題目描述 簡單 給定乙個整數陣列nums,找到乙個具有最大和的連續子陣列 子陣列最少包含乙個元素 返回其最大和。題目鏈結 示例 1 輸入 2,1,3,4,1,2,1,5,4 輸出 6解釋 連續子陣列 4,1,2,1 的和最大,為 6。演算法分析 設dp i 表示以第i個數結尾的子陣列的最大和,那麼只...
53 最大子序和 力扣(LeetCode)
給定乙個整數陣列 nums 找到乙個具有最大和的連續子陣列 子陣列最少包含乙個元素 返回其最大和。示例 輸入 2,1,3,4,1,2,1,5,4 輸出 6 解釋 連續子陣列 4,1,2,1 的和最大,為 6。這裡使用的是動態規劃的方法。sums i 表以nums i 結尾的連續子串行的最大值 則有以...
求最大子序和(力扣53)
給定乙個整數陣列 nums,找到乙個具有最大和的連續子陣列 子陣列最少包含乙個元素 返回其最大和。力扣原題鏈結 示例 輸入 2,1,3,4,1,2,1,5,4 輸出 6 解釋 連續子陣列 4,1,2,1 的和最大,為6 暴力求解 class solution return max 貪心法 當前和小於...