劍指Offer 程式設計題31(連續子陣列的最大和)

2021-07-13 09:40:24 字數 1239 閱讀 5882

例如輸入的陣列為,和最大的子陣列為{3, 10, -4, 7, 2}。因此輸出為該子陣列的和18 。

解法一:舉例分析陣列的規律。

我們試著從頭到尾逐個累加示例陣列中的每個數字。初始化和為0。第一步加上第乙個數字1, 此時和為1。接下來第二步加上數字-2,和就變成了-1。第三步刷上數字3。我們注意到由於此前累計的和是-1 ,小於0,那如果用-1 加上3 ,得到的和是2 , 比3 本身還小。也就是說從第乙個數字開始的子陣列的和會小於從第三個數字開始的子陣列的和。因此我們不用考慮從第乙個數字開始的子陣列,之前累計的和也被拋棄。

我們從第三個數字重新開始累加,此時得到的和是3 。接下來第四步加10,得到和為13 。第五步加上-4, 和為9。我們發現由於-4 是乙個負數,因此累加-4 之後得到的和比原來的和還要小。因此我們要把之前得到的和13 儲存下來,它有可能是最大的子陣列的和。第六步加上數字.7,9 加7 的結果是16,此時和比之前最大的和13 還要大, 把最大的子陣列的和由13更新為16。第七步加上2,累加得到的和為18,同時我們也要更新最大子陣列的和。第八步加上最後乙個數字-5,由於得到的和為13 ,小於此前最大的和18,因此最終最大的子陣列的和為18 ,對應的子陣列是{3, 10, -4, 7, 2}。

public class test31 

// 記錄最大的子陣列和,開始時是最小的整數

int max = integer.min_value;

// 當前的和

int curmax = 0;

// 陣列遍歷

for (int i : arr)

// 如果當前和大於0,累加當前和

else

// 更新記錄到的最在的子陣列和

劍指offer 31 連續子陣列的最大和

輸入乙個整型陣列,陣列裡有正數也有負數。陣列中乙個或連續的多個整數組成乙個子陣列,求所有子陣列和的最大值,要求時間複雜度o n 看到這個問題的時候我首先想到是 例項化乙個新陣列,用陣列元素作為下標,元素出現的個數作為陣列值,但是想想又發現不行 因為陣列裡的值不確定,因此例項化陣列的時候陣列大小就不確...

劍指Offer 面試題31 連續子陣列的最大和

連續子陣列的最大和 輸入乙個整形陣列,陣列裡有整數也有負數。陣列中乙個或連續的多個整數組成乙個子陣列。求所有子陣列的和的 最大值。要求時間複雜度為o n 分析 剛開始令sum 0,f i else if lsum lmaxsum printf lld d d n lmaxsum,ibegindex,...

劍指Offer之面試題31 連續子陣列的最大和

所有 均通過g 編譯器 測試,僅為練手紀錄。面試題31 連續子陣列的最大和 題目 輸入乙個整型陣列,陣列裡面有正數也有負數。陣列中乙個或連續的多個整數組成乙個字陣列。求所有子陣列的和的最大值。要求時間複雜度為 o n 面試題31 連續子陣列的最大和 題目 輸入乙個整型陣列,陣列裡面有正數也有負數。陣...