最大子串和

2021-08-08 07:19:39 字數 816 閱讀 6238

本文討論的最大子串和指的是在乙個數字序列中,求出所有子串各數字之和最大

對於給定的乙個數字序列,這裡以為例說明(**示例則是普遍對於整型數字序列

先給出**,不懂的讀者再看講解

#include

using namespace std;

int a[

1010];

long

maxsubstr

(int a,

int n)

else

if(m>sum)

}return sum;

}int main (

) cout<<

"最大子串和:"

<<

maxsubstr

(a,n)

}

分析:

在本程式中運用的是動態規劃的思想,時間複雜度為o(n),空間複雜度為o(1),

核心思想:

利用中間變數m來更新我們的sum的最大值,

當m<=0時,表明在此下標以前的數字序列的和為負,那麼不管我們後邊的序列是何值,在加上m後必定不會增加,那麼此時我們應該捨棄m,將m更新為下乙個值

當m>0,後邊序列加上m都會使其增加,則我們更新m的值為此時的m加上下乙個值

最關鍵的是後邊的m和sum的比較,此步驟實現了動態規劃的思想,當我們檢測到m的值比此刻的sum更大時,表明出現了新的最大子串和,更新sum

如果我們需輸出最大子串和的每乙個組成元素的話,我們就需要引進兩個下標變數來記錄子串的起始和終止位置

最大子串和

要說明kadane演算法的正確性,需要兩個結論。首先,對於array 1 n 如果array i j 就是滿足和最大的子串,那麼對於任何k i k j 我們有array i k 的和大於0。因為如果存在k使得array i k 的和小於0,那麼我們就有array k 1 j 的和大於array i ...

最大子串和問題

問題 給定一組數字,求連續的字串的最大的和。這裡要注意題目中是子串和而不是子串行和。子串行只要求各元素的順序與其在陣列中一致,而沒有連續的要求。如果求子序列,可直接把這組數字中的正數相加即可。最開始想著只要把這組數字中各個正數子串行分別求和,比較哪個大就行了,後來發現不對。比如 正數子串行分別為,其...

最大子串和問題(Maximum Subarray)

又乙個經典問題,對於乙個包含負值的數字串array 1.n 要找到他的乙個子串array i.j 0 i j n 使得在array的所有子串中,array i.j 的和最大。這裡我們需要注意子串和子串行之間的區別。子串是指數組中連續的若干個元素。子串行只要求各元素的順序與其在陣列中一致,而沒有連續的...