PHP中怎样实现正负数的相加,PHP 求任意n个正负整数里面最大的连续和
案例描述:
編寫一個PHP函數(shù)。求任意n個正負整數(shù)里面最大的連續(xù)和,要求算法時間復(fù)雜度盡可能低;
例如:echo getMaxSum(array(-2,1,3,9,-4,2,3,5,-3,-4,1,3));//最大連續(xù)和是(1,3,9,-4,2,3,5)相加函數(shù)返回19
代碼如下:
header('content-type:text/html;charset=utf8 ');
//算法分析:
//1、必須是整數(shù)序列
//2、如果整個序列不全是負數(shù),最大子序列的第一項必須是正數(shù),
//否則最大子序列后面的數(shù)加起來再加上第一項的負數(shù),其和肯定不是最大的;
//3、如果整個序列都是負數(shù),那么最大子序列的和是0;
//全負數(shù)序列很簡單,不舉例$arr=array(-2,1,3,9,-4,2,3,5,-3,-4,1,3);
$thissum=0;
$maxsum=0;
$start=0;//記錄子序列的起始下標(biāo)
$end=0;//記錄子序列的結(jié)束下標(biāo)
for($i=0;$i
$thissum+=$arr[$i];//取得當(dāng)前子序列的和
if($thissum>$maxsum){//如果當(dāng)前子序列的和大于當(dāng)前最大子序列的和
$maxsum=$thissum;//改變當(dāng)前最大子序列的和
$end=$i;
}else if($thissum<0){//如果當(dāng)前子序列的和小于0,則把下一個元素值假定為最大子序列的第一項,這里可以保證最大自序列的第一項一定是正數(shù)
$thissum=0;//前提這個序列不全是負數(shù)
$start=$i+1;
}
}
$parr=array($start,$end,$maxsum);
list($start,$end,$maxsum)=$parr;
print_r($arr);
echo '最大子序列是:';
for($i=$start;$i<=$end;$i++){
echo $arr[$i].' ';
}
echo '
';
echo '最大子序列的和是'.$maxsum;
?>
效果如下:
Array
(
[0] => -2
[1] => 1
[2] => 3
[3] => 9
[4] => -4
[5] => 2
[6] => 3
[7] => 5
[8] => -3
[9] => -4
[10] => 1
[11] => 3
)
最大子序列是:1 3 9 -4 2 3 5
最大子序列的和是19 這樣就完成了案例的要求,思路很重要!
總結(jié)
以上是生活随笔為你收集整理的PHP中怎样实现正负数的相加,PHP 求任意n个正负整数里面最大的连续和的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: nsct matlab,图像融合 NSC
- 下一篇: mil跟踪算法matlab,几种目标跟踪