1. 程式人生 > >53 最大連續子陣列和

53 最大連續子陣列和

給定一個整數陣列 nums ,找到一個具有最大和的連續子陣列(子陣列最少包含一個元素),返回其最大和。

示例:

輸入: [-2,1,-3,4,-1,2,1,-5,4],
輸出: 6
解釋: 連續子陣列 [4,-1,2,1] 的和最大,為 6。

進階:

如果你已經實現複雜度為 O(n) 的解法,嘗試使用更為精妙的分治法求解。

 

思路:

要獲取最大的和,則起始之數必然要小於等於之前的和。同時要使用貪心原則,一直遍歷到最後,獲取最大的和。

程式碼如下:

<?php

$a = [-1,1,-3,4,-1,2,1,-5,4];

$max = $tmpMax = 0;
$left = $right = 0;

for($i=0; $i<count($a); $i++) {
    $tmpMax += $a[$i];

    if ($tmpMax <= $a[$i]) {
        $tmpMax = $a[$i];
        $left = $i;
    }

    if ($tmpMax > $max) {
        $max = $tmpMax;
        $right = $i;
    }
}

var_dump($max,$left,$right);

 

結果:

/opt/wwwroot/test/test1.php:22:int 6
/opt/wwwroot/test/test1.php:22:int 3
/opt/wwwroot/test/test1.php:22:int 6

最大值為6,從$a[3]到$a[6],即[4,-1,2,1]。

這裡使用了動態規劃。