您的位置:首页 > 其它

求子数组和的最大值算法

2012-07-05 02:25 246 查看
求子数组的最大和(数组)

题目:

输入一个整形数组,数组里有正数也有负数。

数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。

求所有子数组的和的最大值。要求时间复杂度为O(n)。

例如输入的数组为1,
-2, 3, 10, -4, 7, 2, -5,和最大的子数组为3, 10, -4, 7, 2,

因此输出为该子数组的和18。

=============================================================================

packagemax_sub_array;

 

/**

 * @authorzhou shengshuai

 *

 */

public classMaxSubSumTest2
{

 

    public intmaxSubSum(int[]
arr) {

          intmaxSubSum
= arr[0];

          intsubSum
= arr[0];

 

          for(int i
= 1; i < arr.length;
i++) {

              if (subSum
> 0) {

                   subSum +=arr[i];

              } else {

                   subSum =arr[i];

              }

             

              if (maxSubSum
< subSum) {

                   maxSubSum= subSum;

              }

          }

         

          returnmaxSubSum;

    }

 

    /**

     * @paramargs

     */

    public static voidmain(String[]
args) {

          MaxSubSumTest2 msa= new MaxSubSumTest2();

 

          intmax
= msa.maxSubSum(new int[]
{ 1, -2, 3, 10, -4, 7, 2, -5 });

 

          System.out.println("Max
Sub Array Sum: " + max);

    }

 

}

 

Note:

Obviously
the method maxSubSum(int[]arr) of
above class MaxSubSumTest2fits
the bill, i.e. Time Complexity is O(N).

====================================================================

packagemax_sub_array;

 

/**

 * @authorzhou shengshuai

 *

 */

public classMaxSubSumTest
{

 

    public intmaxSubSum(int[]
arr) {

          intmaxSubSum
= arr[0];

          for(int out
= 1; out < arr.length;
out++) {

              for (int in
= 0; in <= out; in++) {

                   intsubSum
= 0;

                   for(int core
= in; core <= out; core++) {

                       subSum += arr[core];

                   }

                   if(maxSubSum
< subSum) {

                       maxSubSum = subSum;

                   }

              }

          }

          returnmaxSubSum;

    }

 

    /**

     * @paramargs

     */

    public static voidmain(String[]
args) {

          MaxSubSumTest msa =new MaxSubSumTest();

 

          intmax
= msa.maxSubSum(new int[]
{ 1, -2, 3, 10, -4, 7, 2, -5 });

 

          System.out.println("Max
Sub Array Sum: " + max);

    }

 

}

Note:

Obviously
the method maxSubSum(int[]
arr) of
above class MaxSubSumTest don't
fits the bill, i.e. Time Complexity is O(N^2). 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  string