leetcode53 最大子序和你記住了嗎

2021-10-03 19:03:56 字數 1786 閱讀 4589

最大子序和

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

示例:輸入: [-2,1,-3,4,-1,2,1,-5,4],

輸出: 6

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

暴力:

class

solution

}return max;}}

;

貪心:

int

maxsubarray

(vector<

int>

& nums)

return max;

}

//分治

class

solution

intmaxsubarrayhelper

(vector<

int>

&nums,

int left,

int right)

int mid =

(left + right)/2

;int leftsum =

maxsubarrayhelper

(nums, left, mid)

;//注意這裡應是mid + 1,否則left + 1 = right時,會無線迴圈

int rightsum =

maxsubarrayhelper

(nums, mid +

1, right)

;int midsum =

findmaxcrossingsubarray

(nums, left, mid, right)

;int result =

max(leftsum, rightsum)

; result =

max(result, midsum)

;return result;

}int

findmaxcrossingsubarray

(vector<

int>

&nums,

int left,

int mid,

int right)

int rightsum = int_min;

sum =0;

//注意這裡i = mid + 1,避免重複用到nums[i]

for(

int i = mid +

1; i <= right; i++

)return

(leftsum + rightsum);}

};

//分治

intmaxsubarray

(vector<

int>

& nums)

intmaxsubarrayhelper

(vector<

int>

&nums,

int left,

int right)

intfindmaxcrossingsubarray

(vector<

int>

&nums,

int left,

int mid,

int right)

sum =0;

for(

int j = mid+

1; j <= right;

++j)

return

(rightres+leftres)

;}

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 表示最後一項為...