求二维数组的最大子数组
一、题目:
n返回一个二维整数数组中最大子数组的和。
二、要求:
n输入一个二维整形数组,数组里有正数也有负数。
n二维数组中连续的一个子矩阵组成一个子数组,每个子数组都有一个和。
n求所有子数组的和的最大值。要求时间复杂度为O(n)。
三、程序源码:
import java.util.Random; import java.util.Scanner; public class dd { public static void main(String[] args) { // TODO Auto-generated method stub System.out.println("请输入数组的行数和列数:"); Scanner sc=new Scanner(System.in); int n=sc.nextInt(); int m=sc.nextInt(); int a[][]=new int[n][m]; Random rand=new Random(); int Sum=0; int N=0; int i=0; int e=0; System.out.print("请输入数字范围:"); int m1=sc.nextInt(); int m2=sc.nextInt(); for(e=0;e<m;e++) { for(i=0;i<n;i++) { a[i][e]=(int) (m1+Math.random()*(m2-m1+1)); System.out.print(a[i][e]+" "); } System.out.println(); } int M=a[0][0]; for(e=0;e<m;e++) { int y=e; do { for(i=0;i<n;i++) { for(int u=e;u>=y;u--) { Sum=Sum+a[i][u]; } N=N+Sum; if(N>=M) { M=N; } if(N<0) { N=0; } Sum=0; } y--; N=0; }while(y>=0); } System.out.println("最大:"+M); } }
四、程序运行截图:
五、两人合作过程及体会以及解决冲突方法:
合作过程:此次开发,有严雅芳进行程序分析和代码编程,我负责代码复审和代码测试计划。
体会:合作开发中,交流最为重要,要写好程序,就要让同伴了解自己的程序设计思路,与同伴之间沟通好,由于自己理解力比较差,对于严雅芳的设计思路好久才理清,以后要多多注意了。
解决冲突的方法:当发生冲突时,先让双方互换意见及思路,再不能说服对方的情况下,停止编程,让各自冷静下来,仔细想想,过一段时间再继续。
六、结对开发照: