子数组和最大值算法

程序设计思路:

  有数组Array[10], 先设置两个变量sum和max,一个存贮子数组的和,一个存贮和的最大值,先令sum=Array[0] max=Array[0],然后用循环遍历数组的每一个数,如果sum+Array[1]> sum那么将sum更新为sum+Array[1],如果更新的sum大于max那么将max更新为sum。如果sum+Array[1]<0那么令sum=0,再往后查找别的子数组。如果sum+第二个数的值大于0小于sum,令sum=sum+Arrar[1]。

程序源代码:

 1 public class Test2 {
 2      public static void main(String args[]){
 3          int Array[]={0,1,5,-4,9,10,54,-6,-34,78};
 4          int max=Array[0];
 5          int sum=Array[0];
 6          for(int i=1;i<10;i++){
 7              if(sum+Array[i]>=sum){
 8                  sum=sum+Array[i];
 9                  if(sum>max){
10                  max=sum;}
11              }    
12              else if(sum+Array[i]<0){
13                  sum=0;
14              }
15              else{
16                  sum=sum+Array[i];
17              }
18          }
19          System.out.println("和最大的子数组的和为:"+max);
20      }
21 }    

运行结果截屏:

问题分析:

  在运算子数组和的时候,比较加上下一数据项和已存在子数组的和相比较,在和小于原盒的时候直接归零了,导致算出的和最大值有误!

  即令sum+Array[i]<sum)直接使sum=0,出现错误

总结:
  在写程序的时候应该先想好思路,想清楚算法,不然容易出现错误
原文地址:https://www.cnblogs.com/amiee/p/5368705.html