/**
* 求子数组之和的最大值(二维)
*
*/
public class SubBinaArraySum {
/* n*m的二维数组 */
public static int sum(int a[][], int n, int m) {
int start = 0;
int max = BC(a, 0, m, n);
/* k为低端劈开二维数组的列,i为高端劈开二维数组的列 */
for (int k = 0; k <= m; k++) {
for (int i = m; i >= k; i--) {
for (int j = n; j >= 0; j--) {
start += BC(a, k, i, j);
if (start < 0) {
start = 0;
}
if (start > max) {
max = start;
}
}
start = 0;
}
}
return max;
}
/* low和high为将二维数组劈开的两列,取值范围为0 - m,line为二维数组的哪一行 ,函数返回两列之间的一维数组的和 */
public static int BC(int a[][], int low, int high, int line) {
int sum = 0;
for (int i = low; i <= high; i++) {
sum += a[line][i];
}
return sum;
}
public static void main(String[] args) {
int a[][] = { { -1, -2, 3, -4 }, { -1, -2, 3, -4 }, { -1, -2, 3, -4 } };
System.out.println(sum(a, a.length - 1, a[0].length - 1));
}
}
求子数组之和的最大值(二维)
最新推荐文章于 2017-03-31 19:52:00 发布