這篇文章主要介紹了PHP實現求連續子數組最大和問題2種解決方法,涉及php針對數組的遍歷、判斷、運算等相關操作技巧,需要的朋友可以參考下
本文實例講述了PHP實作求連續子數組最大和問題2種解。分享給大家供大家參考,具體如下:
問題描述
求子數組的最大和
題目描述:
輸入一個整形數組,數組裡有正數也有負數。
數組中連續的一個或多個整數組成一個子數組,每個子數組都有一個和。
求所有子數組的和的最大值。要求時間複雜度為O(n)。
關於連續子數組最大和這個問題,有兩種解法,一種是動態規劃
#解法如下:
#function getMaxSubSum($arr){ $curSum = $arr[0]; $maxSum = $arr[0]; for($i = 1; $i < count($arr); $i++){ if($curSum > 0) $curSum += $arr[$i]; else $curSum = $arr[$i]; if($curSum > $maxSum) $maxSum = $curSum; } return $maxSum; }
還有一種是掃描法
function getMaxSubSum($arr){ $curSum = 0; $maxSum = 0; for($i = 0; $i < count($arr); $i++ ){ $curSum += $arr[$i]; if($curSum <= 0) $curSum = 0; if($curSum > $maxSum) $maxSum = $curSum; } if($maxSum == 0){ $maxSum = $arr[0]; for($i = 1; $i < count($arr); $i++){ if($maxSum < $arr[$i] ) $maxSum = $arr[$i]; } } return $maxSum; }
以上是PHP實作求連續子數組最大和問題2種解法講解的詳細內容。更多資訊請關注PHP中文網其他相關文章!