找出兩個不相交連續子陣列的最大和
阿新 • • 發佈:2019-01-25
題目:
有一個整數陣列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; }