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

要求:

输入一个整形数组,数组里有正数也有负数。

数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。

求所有子数组的和的最大值。要求时间复杂度为O(n)

思路:我的思路是定义一个方法,在这个方法中对子数组求和,最后返回最大值。在主方法中对数组的数值类型、数组长度、数组中数值的个数进行限制。

下面是我的一个简易版,程序运行之后会直接显示出子数组和的最大值

public class Test2 {
    public static void main(String[] args) {
        int[] array = {8,21,-2,5,4,-9,10};
        int b = getMax(array);
        System.out.println(b);
    }

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

运行结果:

 

 下面这个是我做的完整版的,新加了一个功能,数组的值不能输入小数

import java.util.InputMismatchException;
import java.util.Scanner;

public class Test {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.print("请输入数组长度:");
        int len = sc.nextInt();
        int[] array = new int[len];
        System.out.print("请输入数组:");
        for (int i = 0; i < len; i++) {
            try{
                array[i] = sc.nextInt();
            }catch (InputMismatchException e){//判断数组值是否为整数,如果不是,直接抛出异常
                System.out.println("输入错误!");
            }
        }
        int max = Getmax(array);
        System.out.println("子数组最大值:"+max);
    }

    public static int Getmax(int[] a){
        int sum = 0;
        int max = 0;
        for (int i = 0; i < a.length; i++) {
            sum += a[i];
            if(sum <= 0){
                sum = 0;
            }
            if(sum > 0){
                max = sum;
            }
        }
        return max;
    }
}

运行结果:

 

 

 

 如果不想重复执行操作的话,可以在代码中加入while或者do...while循环

如果有什么不足的地方,请大家帮忙指出。

注:这个东西虽然不难,但是最重要的是里面的逻辑思维!!!

posted on 2022-03-12 21:01  跨越&尘世  阅读(39)  评论(0编辑  收藏  举报