最大子序和 leetcode

2021-09-24 08:46:02 字數 949 閱讀 1227

最大和子串行有乙個特徵就是,最大和子串行的起始位置之前的元素相加和肯定是小於等於0的,否則如果大於0,

那麼起始點就是前面元素的起始點了,只要大於0就會對子序列起到增加最大值的作用。

本演算法正式利用這一特點,只計算所有可能出現最大和的子串行。看下面這個例子:

-1 -2 -3 3 4 5 -11 7 8 這個序列中-1 -2 -3都可以忽略,對最大和沒有貢獻,所以第乙個可能是最大和序列的起始位置

是1,3 4 5是可能的最大子串行,計算到-11後,最大和變成了負數,所以下乙個可能最大和的子串行的開始是從7開始。

最後比較各個可能是最大和的子串行的最大和,求出最大即可。

該例子附加一種情況:-1 -2 -3 3 4 5 -6,子串行3 4 5 之後,當前的最大值為12,遇到了-6,那麼當前值仍未正,所以

不會重置當前最大值為0,但已儲存的最大值還是12。

class

solution

// max_value 存在的意義是針對全為 <= 0的特殊情況的處理

// 思路:在上面排除掉全為<=0的情況之後,讓max 初始值定位0,這樣後續遍歷當前元素,並相加之後,

// 一旦小於當前的最大值且小於0了,那麼讓最大值重新歸0,繼續算後面的可能的子串,最後比較不同的字串中的最大的值

int max_value = nums[0];

int max_sum = 0;

int cur_max = 0;

for (int i = 0; i < nums.size(); i++)

cur_max += nums[i];

if (cur_max > max_sum) else

if (cur_max < 0)

}if (max_value <= 0) else

}};複製**

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...