求乙個陣列的連續子陣列的最大和

2021-09-27 01:31:02 字數 668 閱讀 9947

輸入乙個整型陣列,陣列中有正有負。陣列中的乙個或多個整數組成乙個子陣列。求所有子陣列的和的最大值,要求時間複雜度為o(n)。

首先,根據題意,可能我們都會想到列舉陣列中所有的子陣列的和。我們都知道乙個長度為n的陣列,總共有n(n+1)/2個子陣列。計算出所有子陣列的和需要o(n^2)時間。

我們先來舉例分析下陣列的規律,給出乙個陣列。

步驟操作

累加的子陣列和

最大子陣列的和1加1

11-2加-2-11

3拋棄前面累加的子陣列和-1,並加333

10加10

1313

-4加-4913

7加716162加2

1818

-5加-5

1318

從上表可以看出一旦累加的子陣列和為負時,我們應當拋棄當前子陣列和,最大子陣列和始終保持最大的。根據上表,我們的**如下所示。

function thebigsumstr(arr)  else 

if(sum > maxsum)

}return maxsum;

}var arr = [1,-2,3,10,-4,7,2,-5];

console.log(thebigsumstr(arr)); //18

因只有乙個迴圈,因此時間複雜度滿足題目要求。

乙個陣列有 N 個元素,求連續子陣列的最大和

輸入描述 輸入為兩行。第一行乙個整數n 1 n 100000 表示一共有n個元素 第二行為n個數,即每個元素,每個 整數都在32位int範圍內。以空格分隔。輸出描述 所有連續子陣列中和最大的值。示例1 輸入3 1 2 1輸出3 我們用pos代表即將要加的數,sum從0開始一直 pos,並每次進行判斷...

面試題 求乙個陣列的連續子陣列的最大和

思路 設定乙個最大和 max 對於每乙個元素都求出其最大的子陣列的連續和 tmpmax 然後再與這個最大和進行比較 實現 include include int main 暴力求解法 int max 100000 for size t i 0 i num i std cout max endl re...

求連續子陣列的最大和

題目一 給定乙個陣列,求該陣列的最大子陣列和 與求最長連續子陣列互為姊妹題 題目二 給定乙個陣列,求該陣列的最大兩個子陣列的和 子陣列位置無重合 解題一 子陣列的最大和 技巧法 func getmaxsum arr int int res intmin cur 0 for ele range arr...