力扣53 最大子序和

2021-10-03 04:24:49 字數 1819 閱讀 6111

給定乙個整數陣列 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 貪心法 當前和小於...