返回一个整数数组中最大子数组的和

程序设计思想:

思路:
因为时间复杂度为O(n),则只能遍历一次数组
这里同时使用两个变量sum和max,其中sum保存的是当前的和,若sum<0
则从下一个位置从新记录,max记录的是历史的最大值
只有当sum>max时用sum替换max。

出现的问题:

在初始化max和sum的值时,把max初始化成了0,sum的值初始化成了数组的而第一个元素的值。

可能的解决方法:

应该把max的值初始化成数组的第一个元素的值,把sum的值初始化成0;

源代码:

public class IntArrayMax {
    
    public static void  MaxIntArray(int[] intArray) {
    

        int sum=0;
        int max=intArray[0];
        for(int i=0;i<intArray.length;i++){
            
            if(sum>=0){
                sum+=intArray[i];
            }else{
                sum=intArray[i];
            }
            if(sum>max){
                max=sum;
            }
        }
        System.out.println("子数组中的最大值:"+max);
    }

}
public class Invoke {

    public static void main(String[] args) {
        // TODO 自动生成的方法存根
        Random random=new Random();
        //int num=random.nextInt(10);
        int[] intArray=new int[10];
        System.out.print("随机数组:");
        for(int i=0;i<intArray.length;i++){
            intArray[i]=random.nextInt(10)-5;
            System.out.print(intArray[i]+"  ");
        }
        System.out.print("
");
        IntArrayMax intArrayMax=new IntArrayMax();
        intArrayMax.MaxIntArray(intArray);

    }

}

结果截图:

 总结:

编程前应该先分析清楚题的意思,然后想好思路,进行编程。

原文地址:https://www.cnblogs.com/andibier/p/7988421.html