PHP求最大子序列和的演算法實現

來源:互聯網
上載者:User

複製代碼 代碼如下:<?php
//作者:遙遠的期待
//QQ:15624575
//演算法分析:1、必須是整數序列、2、如果整個序列不全是負數,最大子序列的第一項必須是正數,否則最大子序列後面的數加起來再加上第一項的負數,其和肯定不是最大的;3、如果整個序列都是負數,那麼最大子序列的和是0;
//全負數序列很簡單,不舉例
$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,則把下一個元素值假定為最大子序列的第一項,這裡可以保證最大自序列的第一項一定是正數
$thissum=0;//前提這個序列不全是負數
$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;
?>
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.