劍指offer----連續(xù)子數(shù)組的最大和

題目:HZ偶爾會拿些專業(yè)問題來忽悠那些非計算機專業(yè)的同學。今天測試組開完會后,他又發(fā)話了:在古老的一維模式識別中,常常需要計算連續(xù)子向量的最大和,當向量全為正數(shù)的時候,問題很好解決。但是,如果向量中包含負數(shù),是否應(yīng)該包含某個負數(shù),并期望旁邊的正數(shù)會彌補它呢?例如:{6,-3,-2,7,-15,1,2,2},連續(xù)子向量的最大和為8(從第0個開始,到第3個為止)。你會不會被他忽悠住?(子向量的長度至少是1)

public class Solution {
    public int FindGreatestSumOfSubArray(int[] array) {
        if(array.length == 0){
            return 0;
        }
        int currSum = array[0];
        int sum = array[0];
        for(int i = 1; i < array.length; i++){
            currSum = currSum >= 0 ? currSum + array[i] : array[i];
            sum = currSum > sum ? currSum : sum;
        }
        return sum;
    }
}

通過一個currSum統(tǒng)計當前正序列能到達的最大值,如果currSum變成了負值說明剛剛那個負數(shù)太小了,以至于把之前辛辛苦苦攢的正值和都給抵消掉了,所以我們不能將這個負數(shù)添加到連續(xù)數(shù)組中,所以連續(xù)子數(shù)組一定在這個數(shù)的后面,我們需要在后面更新這個currSum,所以將currSum置為當前數(shù),到下一次循環(huán)時,currSum仍然時負的,直到一個正數(shù)出現(xiàn),我們就可以重新計算這個和了,如果這個currSum大于我們之前訪問的所有的sum,則更新sum為currSum;
最后返回的sum一定時最大值

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 連續(xù)子數(shù)組的最大和 題目描述 HZ偶爾會拿些專業(yè)問題來忽悠那些非計算機專業(yè)的同學。今天測試組開完會后,他又發(fā)話了:...
    echoVic閱讀 1,138評論 0 4
  • 說明: 本文中出現(xiàn)的所有算法題皆來自牛客網(wǎng)-劍指Offer在線編程題,在此只是作為轉(zhuǎn)載和記錄,用于本人學習使用,不...
    秋意思寒閱讀 1,215評論 1 1
  • 劍指 offer 在一個二維數(shù)組中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成...
    faremax閱讀 2,313評論 0 7
  • 劍指Offer筆試題(2) 題目來源:牛客網(wǎng) 題目一 復(fù)雜鏈表的復(fù)制 描述: 輸入一個復(fù)雜鏈表(每個節(jié)點中有節(jié)點...
    Torang閱讀 1,634評論 2 4
  • Queue 是 java中的一個接口,在java.util包下面,意在實現(xiàn)數(shù)據(jù)結(jié)構(gòu)中的隊列,主要包含以下幾種接口方...
    captain_fu閱讀 935評論 0 0

友情鏈接更多精彩內(nèi)容