1. 程式人生 > >找出兩個不相交連續子陣列的最大和

找出兩個不相交連續子陣列的最大和

題目:

         有一個整數陣列n,a和b是n裡兩個互不相交的子陣列。返回sum(a)+sum(b)的最大值。

分析:

新建兩個陣列left和right,left[i]表示n[0:i]的連續子陣列的最大和,right[i]表示n[i:length-1]的連續子陣列的最大和。left[i]+right[i+1]的最大值就是答案。

function twoSubArrayMaxSum($arr){
    $len = count($arr);
if($len < 2){
        return false;
}
    $right = array();
$cur 
= 0; $rmax = $arr[$len-1]; for($i=$len-1;$i>0;$i--){ $cur += $arr[$i]; $rmax = max($rmax,$cur); //從右邊開始到左邊對應下標下的最大和--只需統計到下標為1$right[$i] = $rmax; $cur = $cur >0 ? $cur: 0; } $res = $lmax = $arr[0]; $cur = 0; for($i=0;$i<$len-1;$i++){ $cur += $arr[$i]; $lmax = max($lmax,$cur); $res
= max($res,$lmax+$right[$i+1]); $cur = $cur >0 ?: 0; } return $res; }