PHP求最大子序列和的算法實現(xiàn)
更新時間:2011年06月24日 22:23:44 作者:
給定整數(shù):A1 A2 A3 A4 … An,其中可能有負數(shù),求Ai-Aj的和的最大值。
復制代碼 代碼如下:
<?php
//作者:遙遠的期待
//QQ:15624575
//算法分析:1、必須是整數(shù)序列、2、如果整個序列不全是負數(shù),最大子序列的第一項必須是正數(shù),否則最大子序列后面的數(shù)加起來再加上第一項的負數(shù),其和肯定不是最大的;3、如果整個序列都是負數(shù),那么最大子序列的和是0;
//全負數(shù)序列很簡單,不舉例
$arr=array(4,-3,5,-2,-1,2,6,-2);
function getmaxsum($arr){
$thissum=0;
$maxsum=0;
$start=0;//記錄子序列的起始下標
$end=0;//記錄子序列的結束下標
for($i=0;$i<count($arr);$i++){
$thissum+=$arr[$i];//取得當前子序列的和
if($thissum>$maxsum){//如果當前子序列的和大于當前最大子序列的和
$maxsum=$thissum;//改變當前最大子序列的和
$end=$i;
}else if($thissum<0){//如果當前子序列的和小于0,則把下一個元素值假定為最大子序列的第一項,這里可以保證最大自序列的第一項一定是正數(shù)
$thissum=0;//前提這個序列不全是負數(shù)
$start=$i+1;
}
}
$parr=array($start,$end,$maxsum);
return $parr;
}
list($start,$end,$maxsum)=getmaxsum($arr);
echo '最大子序列是:';
for($i=$start;$i<=$end;$i++){
echo $arr[$i].' ';
}
echo '<br>';
echo '最大子序列的和是'.$maxsum;
?>
相關文章
php中ob(Output Buffer 輸出緩沖)函數(shù)使用方法
php中ob(Output Buffer 輸出緩沖)函數(shù)使用方法...2007-07-07PHP中使用json數(shù)據(jù)格式定義字面量對象的方法
這篇文章主要介紹了PHP中使用json數(shù)據(jù)格式定義字面量對象的方法,這是一種變通方法,使用json還可以在類中生成數(shù)組哦,需要的朋友可以參考下2014-08-08深入分析使用mysql_fetch_object()以對象的形式返回查詢結果
本篇文章是對使用mysql_fetch_object()以對象的形式返回查詢結果進行了詳細的分析介紹,需要的朋友參考下2013-06-06