53 最大子序和 力扣(LeetCode)

2021-09-27 06:03:58 字數 1639 閱讀 8041

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