編寫一個html' target='_blank'>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
代碼如下:
//算法分析://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$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 求任意n個正負整數里面最大的連續和,包括了直接任意球和間接任意球的區別方面的內容,希望對PHP教程有興趣的朋友有所幫助。
鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。
新聞熱點
疑難解答