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