2012-01-25 43 views
0

如。 -3,6,11,13,5,-11,4,7,8最大总和= 30(6,11,13原因添加-3将使之和小)最大的和非递减顺序

例如。 7,0,-3最大总和= 7

例如4,-1,45最大总和= 45

例如-3 - , - 2,-6,0最大总和= 0

极品一些建议对我的代码,仍然马车

int maxSum = Integer.MIN_VALUE; 
    int sum = 0; 
    int checkNeg = Integer.MIN_VALUE; 

    for (int i = 0; i < a.length; i++) { 
     if (a[i] > checkNeg) { 
      checkNeg = a[i]; 
     } 
    } 

    if (checkNeg <= 0) { 
     maxSum = checkNeg; 
    } 

    if (checkNeg > 0) { 
     for (int i = 0; i < a.length; i++) { 
      if (a[i] != 0) { 
       sum += a[i]; 
       if (sum > maxSum) { 
        if (i != 0) { 
         if (a[i] >= a[i - 1]) { 
          maxSum = sum; 
         } else { 
          sum = a[i]; 
         } 
        } else { 
         maxSum = sum; 
        } 
       } 
       if (sum < 0) { 
        sum = 0; 
       } 
      } else { 
       sum = 0; 
      } 
     } 
    } 
    return maxSum; 
+5

请上传失败testacases出来。格式化代码更密集也不会伤害,或者。 – cheeken

+2

请标记作业并将您的逻辑解释为伪代码 –

回答

1

试试这个

 int maxSum = Int32.MinValue; 
     int sum = 0; 

      for (int i = 0; i < a.Length; i++) 
      { 
       if (a[i] >= 0) 
       { 
        sum += a[i]; 
        maxSum = Math.Max(sum, maxSum); 

        if ((i+1<a.Length) && (a[i+1] < a[i])) 
         sum = 0; 
       } 
       else 
       { 
        maxSum = Math.Max(a[i], maxSum); 
        sum = 0; 
       } 
      } 

     return maxSum; 

似乎对你所有的例子和其他几个工作。

没有必要对“checkNeg”,这种检查应该来的算法多了几分自然