课上测试3.11,最大子数组问题

输入一串一维数组,求他们的最大子数组的值,且复杂度应为n。

借鉴了庄忠旭同学的想法,因为子数组必定连续,所以建立一个新数组,该数组表示第几位以前所有项的和。

如果出现负数,将这个负数舍去,记录前面几个数的值。

public static void main(String args[]) {
        int i, m, j = 0;
        int a[] = new int[100];
        int res[] = new int[100];
        System.out.println("想要输入几个数?");
        Scanner num = new Scanner(System.in);
        int n = num.nextInt();
        for (i = 0; i < n; i++) {
            a[i] = num.nextInt();
        }
        res[0] = 0;





        for (m = 0; m < n; m++) {
            res[m + 1] = res[m] + a[m];
            if (j < res[m + 1]) {
                j = res[m + 1];
            }
            if (res[m + 1] < 0) {
                res[m + 1] = 0;
            }
        }
        System.out.println(j);

    }

完毕。

posted @ 2022-03-18 21:36  吕洞玄  阅读(24)  评论(0编辑  收藏  举报