IT公司100題-3-求數組的最大子序列的和

問題描述:java

計算一個給定數組的最大子序列之和數組

求全部子數組的和的最大值。要求時間複雜度爲O(n)。this

例如輸入的數組爲1, -2, 3, 10, -4, 7, 2, -5,和最大的子數組爲3, 10, -4, 7, 2spa

所以輸出爲該子數組的和18。code

分析:
it

有三種方法:io

1,掃描3遍,能夠計算全部的子序列之和,可是複雜度爲N^3。class

2,掃描2遍,計算以任意元素開始的和,若是大於當前的最大值則將最大值付給它,複雜度爲N^2。date

3,掃描一遍,計算任意元素開始的值,若是小於零則清零,不然繼續日後加。file


代碼實現:

package oschina.IT100;
/**
 * @project: DataStructureAndAlgorithmAnalysis
 * @filename: MaxSubSum
 * @version: 0.10
 * @author: Jimmy Han
 * @date: 21:35 2015/7/7
 * @comment: calculate the sum from any point, reset sum when current sum is negative
 * @result: 10
 */

class IT3 {
   public static void main(String[] args){
      int[] arr = {-1, 3, 2, -3, -1, 4, 5};
      System.out.println(maxSubSum(arr));
   }

   public static int maxSubSum( int[] a){
      int maxSum = 0, thisSum = 0;

      for(int j = 0; j < a.length; j++){
         thisSum += a[j];

         if(thisSum > maxSum)
            maxSum = thisSum;
         else if(thisSum < 0)
            thisSum = 0;
      }

      return maxSum;
   }
}
相關文章
相關標籤/搜索