牛客網求連續子陣列的最大和

2022-03-17 12:47:25 字數 1497 閱讀 6091

hz偶爾會拿些專業問題來忽悠那些非計算機專業的同學。今天測試組開完會後,他又發話了:在古老的一維模式識別中,常常需要計算連續子向量的最大和,當向量全為正數的時候,問題很好解決。但是,如果向量中包含負數,是否應該包含某個負數,並期望旁邊的正數會彌補它呢?例如:,連續子向量的最大和為8(從第0個開始,到第3個為止)。給乙個陣列,返回它的最大連續子串行的和,你會不會被他忽悠住?(子向量的長度至少是1)

求最大連續子串行和就是求該陣列的連續子集的最大和。

先找出陣列的若干連續子集,比較其和的大小,找出其中最大的。

獲取輸入的陣列

public

static

void

main(string args)

int max=findgreatestsumofsubarray(n);

system.out.println(max);

}

view code

核心**(最初版)通過兩層迴圈遍歷找出連續子串行和的最大值,時間複雜度為o(n^2)。

public

static

int findgreatestsumofsubarray(int

array)

//將陣列的第乙個數設為最大值

int max=array[0];

//迴圈遍歷連續字集

for(int i=0;i)}}

return

max;

}

view code

核心**(修改版)通過學習大神的**修改,使用一層迴圈,時間複雜度為o(n)。

public

static

int findgreatestsumofsubarray(int

array)

//將陣列的第乙個數設為最大值

int max=array[0];

int sum=0;

//迴圈遍歷連續字集

for(int i=0;i)

if(sum>max)

}return

max;

}

view code

核心**(牛客網其他人通過的**)

public

int findgreatestsumofsubarray(int

array)

return

res;

}

view code

題目比較簡單,剛開始我直接寫迴圈從第一位開始算加法的,提交**時才發現自己算的必須是從第一位開始的連續子集,如果連續子集的最大和在中間就會出錯。

審題不清是我犯的最大錯誤,然後通過兩次迴圈判斷,記憶體迴圈是遍歷陣列存在的從第i位開始的連續子集,加上外從迴圈實現了所有連續子集的遍歷。**通過。

通過比較其他**,我發現只需一層迴圈就可以實現連續子集的最大值查詢,不必求出每個連續子集的和。只需將當前位與陣列的前一位的和 與 當前位比較,如果和變**明不是連續最大和,則將當前位的值設為最大值(同時設為連續子串行的最大和),繼續比較,直至結束。

牛客網 連續子陣列的最大和

hz偶爾會拿些專業問題來忽悠那些非計算機專業的同學。今天測試組開完會後,他又發話了 在古老的一維模式識別中,常常需要計算連續子向量的最大和,當向量全為正數的時候,問題很好解決。但是,如果向量中包含負數,是否應該包含某個負數,並期望旁邊的正數會彌補它呢?例如 連續子向量的最大和為8 從第0個開始,到第...

牛客網 連續子陣列的最大和

hz偶爾會拿些專業問題來忽悠那些非計算機專業的同學。今天測試組開完會後,他又發話了 在古老的一維模式識別中,常常需要計算連續子向量的最大和,當向量全為正數的時候,問題很好解決。但是,如果向量中包含負數,是否應該包含某個負數,並期望旁邊的正數會彌補它呢?例如 連續子向量的最大和為8 從第0個開始,到第...

牛客網 連續子陣列的最大和

hz偶爾會拿些專業問題來忽悠那些非計算機專業的同學。今天測試組開完會後,他又發話了 在古老的一維模式識別中,常常需要計算連續子向量的最大和,當向量全為正數的時候,問題很好解決。但是,如果向量中包含負數,是否應該包含某個負數,並期望旁邊的正數會彌補它呢?例如 連續子向量的最大和為8 從第0個開始,到第...