课上测试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); }
完毕。