leetcode 最大子序和

2021-10-03 05:49:55 字數 928 閱讀 6059

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

高階:如果你已經實現複雜度為 o(n) 的解法,嘗試使用更為精妙的分治法求解。

方法1:暴力破解法

列舉出陣列的所有子陣列,逐個比較大小,求得最小值

class

solution

if(a==false)

*/for(

int i=

0;i)for

(int j=i;j}return max;}}

;

不加注釋的地方也可通過,時間在500ms左右

注釋的地方是判斷子陣列第乙個元素為負數,加上可以將時間提到200ms左右,但是這樣會產生新的問題:如果陣列元素全為負數,便無法得到解。

於是又在前面加了一段應對這種情況的方法,若元素全為負便直接返回最大值

時間複雜度:o(n^2)

空間複雜度:o(1)

方法2:貪心演算法

貪心演算法比較簡單,只需遍歷一遍陣列。

取當前元素位置的最大和,並用max變數記錄最大和,若出現當前最大和為負值,則重新開始取最大和

class

solution

return max;}}

;

效率有極大提高

時間複雜度:o(n)

空間複雜度:o(1)

方法3:動態規劃

用乙個陣列dp儲存以當前元素結尾的最大子序和,也是只需遍歷一次陣列

dp[i] = max(dp[i-1] + nums[i], num[i]);

暫未程式設計實現

方法4:分治法

leetcode最大子序和

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

Leetcode 最大子序和

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

LeetCode 最大子序和

給定乙個整數陣列nums,找到乙個具有最大和的連續子陣列 子陣列最少包含乙個元素 返回其最大和。input 2,1 3,4,1 2,1 5,4 output 6動態規劃 python class solution def maxsubarray self,nums int tmp nums 0 ma...