LeetCode 53 最大子序和

2021-10-20 21:20:45 字數 2013 閱讀 5581

給定乙個整數陣列 nums ,找到乙個具有最大和的連續子陣列(子陣列最少包含乙個元素),返回其最大和。

輸入:nums = [-2,1,-3,4,-1,2,1,-5,4]

輸出:6

解釋:連續子陣列 [4,-1,2,1] 的和最大,為 6 。

輸入:nums = [-100000]

輸出:-100000

一、暴力法:

i:子串行的首元素下標j:子串行的尾元素下標

;二、分治法:

將所給序列a[0,n]分成兩段a[0,n/2]a[n/2 + 1, n],分別求出這兩段的最大子段和

1)最大子序和在a[0,n/2]【遞迴求解】

2)最大子序和在a[n/2 + 1,n]【遞迴求解】

3)最大子序和在a[i, j]0<=i<=n/2;n/2 + 1<=j<=n【兩段分別求解】

class

solution

intdivideconquer

(vector<

int>

& nums,

int left,

int right)

intfindmaxcrossingsubsum

(vector<

int>

& nums,

int left,

int middle,

int right)

sum =0;

int rightsum = int8_min;

for(

int j = middle+

1;j <= right;j++

)return

(leftsum + rightsum);}

intmax

(int a,

int b)

};

三、動態規劃

定義乙個陣列dp,dp[i]表示以第i個元素為結尾一段最大子序和.求dp[i]時,前面dp[0]~dp[i-1]都已經求出,dp[i-1]表示的是以i-1為結尾的最大子序和,若dp[i-1]小於0,則dp[i]加上前面的任意長度的序列和都會小於不加前面的序列(自己本身乙個元素是以自己為結尾的最大自序和)

-2,1,-3,4陣列,dp[0]=-2;dp[1]=1(因為前乙個dp[0]=-2<0,即(-2,1)子序和為-1,乙個元素1子序和為1;dp[2]=dp[1]+nums[2]=1+(-3)=-2;dp[3]=4,因為dp[2]<0.

class

solution

return result;

}int

max(

int a,

int b)

};

參考:

最大子序和(leetcode) 動態規劃、貪心解法、分治解法

最大子序和(動態規劃,分治)

LeetCode53最大子序和

給定乙個序列 至少含有 1 個數 從該序列中尋找乙個連續的子串行,使得子串行的和最大。例如,給定序列 2,1,3,4,1,2,1,5,4 連續子串行 4,1,2,1 的和最大,為6。擴充套件練習 若你已實現複雜度為 o n 的解法,嘗試使用更為精妙的分治法求解。一開始用的最簡單最直接的方法,挨個的把...

LeetCode 53 最大子序和

給定乙個整數陣列nums,找到乙個具有最大和的連續子陣列 子陣列最少包含乙個元素 返回其最大和。示例 輸入 2,1,3,4,1,2,1,5,4 輸出 6 解釋 連續子陣列 4,1,2,1 的和最大,為 6。高階 如果你已經實現複雜度為 o n 的解法,嘗試使用更為精妙的分治法求解。這道題本來是能做出...

LeetCode 53 最大子序和

題目鏈結 題目描述 給定乙個整數陣列 nums 找到乙個具有最大和的連續子陣列 子陣列最少包含乙個元素 返回其最大和。示例輸入 2,1,3,4,1,2,1,5,4 輸出 6 解釋 連續子陣列 4,1,2,1 的和最大,為 6。解決方法 解題思路 動態規劃,複雜度為 o n 令dp i 表示最後一項為...