《劍指Offer》-42.連續(xù)子數(shù)組的最大和

題干

輸入一個整形數(shù)組,數(shù)組里有正數(shù)也有負(fù)數(shù)。數(shù)組中的一個或連續(xù)多個正數(shù)組成一個子數(shù)組。求所有子數(shù)組的和的最大值。要求時間復(fù)雜度為O(n)。

解題思路

思路一

從頭到尾逐個累加數(shù)字,初始化和為0,當(dāng)和為負(fù)數(shù)時丟棄和,使用下一個數(shù)字賦值,和為正數(shù)時繼續(xù)累加,每次累加都與最大值進(jìn)行比較,如果大于最大值,則替換,直到遍歷完后,得到連續(xù)累加和的最大值。

思路二

使用動態(tài)規(guī)劃的思想進(jìn)行分析,f(i) = pData[i] if i=0 or f(i-1) <=0 else f(i-1)+pData[i] if i!=0 and f(i-1)>0

代碼實現(xiàn)

思路一

<?php
/**
 * 順序累加的方式求最大和
 */

/**
 * @param $numbers
 */
function getGreatestSumOfSubArray($numbers)
{
    if (empty($numbers)) {
        return;
    }

    $sum = 0;
    $max = PHP_INT_MIN;

    $len = count($numbers);
    for ($i = 0; $i < $len; $i++) {
        if ($sum <= 0) {
            $sum = $numbers[$i];
        } else {
            $sum += $numbers[$i];
        }

        if ($sum > $max) {
            $max = $sum;
        }
    }

    return $max;
}

echo getGreatestSumOfSubArray([1, -2, 3, 10, -4, 7, 2, -5]);
?著作權(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)容

  • 第2章 基本語法 2.1 概述 基本句法和變量 語句 JavaScript程序的執(zhí)行單位為行(line),也就是一...
    悟名先生閱讀 4,565評論 0 13
  • 在C語言中,五種基本數(shù)據(jù)類型存儲空間長度的排列順序是: A)char B)char=int<=float C)ch...
    夏天再來閱讀 4,042評論 0 2
  • 對于我來說,成長最大的悲哀就在于不得不經(jīng)歷那些讓你痛苦的人和感情吧
    踽踽獨行77閱讀 133評論 0 0
  • 最近寫的《花語》專題,是了結(jié)了我的心愿。因為本人特別喜歡張愛玲對愛情的感悟,所以一直去感悟大師的筆墨。 ...
    囚青鳥閱讀 346評論 0 2
  • 其實,眼前的情形也是意料之中的,但在我親身面對時,卻想撂擔(dān)子。 猶記得剛聽到語文老師請假時那如羊兒擁有整個任其奔騰...
    楓釀閱讀 324評論 0 0

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