問題描述:
輸入乙個整形陣列,陣列裡有正數也有負數。
陣列中連續的乙個或多個整數組成乙個子陣列,每個子陣列都有乙個和。
求所有子陣列的和的最大值。要求時間複雜度為o(n)。
例:輸入的陣列為1, -2, 3, 10, -4, 7, 2, -5,
和最大的子陣列為3, 10, -4, 7, 2,
因此輸出為該子陣列的和18。
int main()
//主要**
int sum=a[0];
int max=a[0];
for(int i=0;i//如果此時和已小於0,就開始重新計算
if(sum<0)
sum=0;
sum=sum+a[i];
//更新最大值
if(sum>max)
max=sum;
}cout
}
我們的問題是要選出「和最大」的連續子陣列:
具體:
當sum的和為-1時,這時就可以對進行拋棄,因為無論後面與那些數進行組合,有這兩個數必然會比沒有這兩個數和小
總結:設sum為包含第i個元素的連續子陣列的和,max 當前記錄的最大子陣列的和。
對第i+1個元素有兩種選擇:
做為新子陣列的第乙個元素
放入前面找到的子陣列
程式設計開發練習題 最大子段和
問題描述 程式設計開發練習題 最大子段和。給定n個整數 可能為負數 組成的序列a 1 a 2 a 3 a n 求該序列如a i a i 1 a j 的子段和的最大值。當所給的整均為負數時定義子段和為0,依此定義,所求的最優值為 max,1 i j n。自上而下的分治演算法 將序列a 1 n 分解為長...
程式設計練習題 求解全排列求最大子陣列之和(Java)
給定乙個整數陣列,找到乙個具有最大和的子陣列,返回其最大和。樣例給出陣列 2,2,3,4,1,2,1,5,3 符合要求的子陣列為 4,1,2,1 其最大和為6 1 找出子陣列的最左端點 for i 1 to n 2 找出子陣列的最右端點 for j i to n 3 求和,找出最大值 sum a i...
最簡單的「最大子段和」問題
最簡單的 最大子段和 問題 description 給定n個整數 可能為負數 a1,a2,an。求ai,ai 1,aj 其中1 i j n的子段和的最大值。當所有整數均為負數時我們定義其最大子段和為0。例如 當 a1,a2,a3,a4,a5,a6 2,11,4,13,5,2 時,最大子段和為a2 a...