今天高海波就群里學生提出的問題總結了這道題目
給定整數:A1 A2 A3 A4 … An,其中可能有負數,求Ai-Aj的和的最大值。
—————
PHP算法博大精深 一般學習php的人 不太重視這些php算法 但是我要告訴你的是 php算法是php程序員必有的職業“素質” 比如你要應聘大型公司如新浪 騰訊 網易 或一些中小型網絡公司 他們面試題目 絕不會少了php算法 因為php算法能反應一個程序員知識的牢固和邏輯思維!所以高海波 php技術博客 建議大家還是要重視php算法!好了 說了這么多 現在正式進入php算法解答這道題目!
<?php//作者:高海波//主頁:http://www.it165.net///算法分析: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;?>
鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。
新聞熱點
疑難解答