二维数组求和
输入一个二维的整形数组,数组里有正数也有负数,数组中连续的一个或多个整数组成一个二维子数组,每个子数组都有一个和。求所有子数组的和的最大值。
解题思路:由于原来做的这个时间有一点久远,我记得当时的思路就是将二维数组转化为一维数组,然后利用原来的一维数组求和的方式进行计算。
源代码
package shengcheng; import java.util.Scanner; import org.junit.Test; public class Erwei { @Test public void fun() { int [][]a=new int[4][4]; Scanner write=new Scanner(System.in); for(int i=0;i<4;i++) { for(int j=0;j<4;j++) { a[i][j]=write.nextInt(); } } int max=-200000; int []sum=new int [4]; int add =-200000 ; for(int i=0;i<4;i++) { for(int l=0;l<4;l++) { sum[l]=0; } for(int j=i;j<4;j++) { for(int k=0;k<4;k++) { sum[k]+=a[j][k]; } add=DP(sum,4); } if(add>max) { max=add; } } System.out.println(max); } public int DP(int a[],int n) { int i; int []temp=new int [100]; int max=a[0]; for(i=1,temp[0]=a[0];i<n;i++) { if(temp[i-1]>0) temp[i]=temp[i-1]+a[i]; else temp[i]=a[i]; if(temp[i]>max) max=temp[i]; } return max; } }
运行截图: