PHP求最大子序列和的算法实现

前端之家收集整理的这篇文章主要介绍了PHP求最大子序列和的算法实现前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

<div class="codetitle"><a style="CURSOR: pointer" data="90877" class="copybut" id="copybut90877" onclick="doCopy('code90877')"> 代码如下:

<div class="codebody" id="code90877"> @H_403_2@<?PHP @H_4032@//作者:遥远的期待 @H4032@//QQ:15624575 @H403_2@//算法分析:1、必须是整数序列、2、如果整个序列不全是负数,最大子序列的第一项必须是正数,否则最大子序列后面的数加起来再加上第一项的负数,其和肯定不是最大的;3、如果整个序列都是负数,那么最大子序列的和是0; @H_4032@//全负数序列很简单,不举例 @H4032@$arr=array(4,-3,5,-2,-1,2,6,-2); @H4032@function getmaxsum($arr){ @H4032@$thissum=0; @H4032@$maxsum=0; @H4032@$start=0;//记录子序列的起始下标 @H4032@$end=0;//记录子序列的结束下标 @H4032@for($i=0;$i<count($arr);$i++){ @H4032@$thissum+=$arr[$i];//取得当前子序列的和 @H4032@if($thissum>$maxsum){//如果当前子序列的和大于当前最大子序列的和 @H4032@$maxsum=$thissum;//改变当前最大子序列的和 @H4032@$end=$i; @H4032@}else if($thissum<0){//如果当前子序列的和小于0,则把下一个元素值假定为最大子序列的第一项,这里可以保证最大自序列的第一项一定是正数 @H4032@$thissum=0;//前提这个序列不全是负数 @H4032@$start=$i+1; @H4032@} @H4032@} @H4032@$parr=array($start,$end,$maxsum); @H4032@return $parr; @H4032@} @H4032@list($start,$maxsum)=getmaxsum($arr); @H4032@echo '最大子序列是:'; @H4032@for($i=$start;$i<=$end;$i++){ @H4032@echo $arr[$i].' '; @H4032@} @H4032@echo '
'; @H
4032@echo '最大子序列的和是'.$maxsum; @H4032@?> @H403_2@

猜你在找的PHP相关文章