本文实例讲述了PHP实现求连续子数组最大和问题2种解决方法。分享给大家供大家参考,具体如下:
问题描述
求子数组的最大和
题目描述:
输入一个整形数组,数组里有正数也有负数。
数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。
求所有子数组的和的最大值。要求时间复杂度为O(n)。
关于连续子数组最大和这个问题,有两种解法,一种是动态规划
解法如下:
1
2
3
4
5
6
7
8
9
10
|
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 ; } |
还有一种是扫描法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
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程序设计有所帮助。
原文链接:http://blog.csdn.net/zhaozonglu/article/details/46795165