输入一个整形数组,返回一个整数数组中最大子数组的和

我刚刚开始的思路是这样的:

    既然求的是最大的和,那么只要确定负数所在的位置就好了,因为只有负数才会让和变小。所有我先找到负数。

    当我查找到第一个负数的时候,我将其前面的所有整数和加在一起,保存在一个变量中。然后在查找第二个负数,然后将这个负数与第一个负数的之间的所有正数相加,将其与第一个负数的绝对值进行比较。

    如果整数和更大,那么将第二个负数前面的所有数相加,保存在变量中。然后第二个负数变为第一个负数。在重复步骤。

    如果是负数绝对值更大,那么将第一个负数去掉,第二个负数变为第一个重复步骤。

  后来我发现这样是纯在bug的,当出现极端情况下,如所有的数都是负数,那么对于程序啧会出现乱码。

最后我还是用了庄忠旭的方法。写出了如下代码。

package qiuhe;

public class qiuhe {
     public static void main(String args[]) {  

           int array[] = {0,-2,3,10,-4,7,2};  
           System.out.println(findMax(array));

        }  

        public static int findMax(int array[]){

            if (array.length == 0) {
                return 0;
            }

            int max = array[0];
            int sum = 0;

            for(int i=0; i<array.length; i++){  
               
                if(sum >= 0) { 
                    sum += array[i];  
                }
                else{  
                    sum = array[i];
                }
                if(sum > max){  
                    max = sum;  
                }
            }  
            return max;  
        }

}

 

posted @ 2022-03-14 20:11  椅念琼  阅读(50)  评论(0编辑  收藏  举报