返回一个首尾相接的二维整数数组中最大子数组的和

题目:

·返回一个二维整数数组中最大子数组的和。

 

要求:

·输入一个二维整形数组,数组里有正数也有负数。

·二维数组首尾相接,象个一条首尾相接带子一样。

·数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。

·求所有子数组的和的最大值。

 

源代码:

import java.util.Random;

import java.util.Scanner;

 

public class erweixunhuanzishuzu {

public static void main(String[] args) {

//产生随机数组

int array[][] = new int[1000][1000];

int arraytemp[] = new int [1000];

int row,col,sum,sumTemp;

int t,m;

int qx=0,qy=0;

int zx=0,zy=0;//分别记录子数列的起始和结束位置

for(int i=0;i<1000;i++)

arraytemp[i]=0;

System.out.print("请分别输入数组的行数和列数:");

Scanner sc=new Scanner(System.in);

row = sc.nextInt();

col = sc.nextInt();

Random r = new Random();

System.out.println("产生的随机数序列为:     ");

for(int i=0;i<row;i++){

for(int j=0;j<col;j++){

array[i][j]=r.nextInt()%10;

array[i][j+col]=array[i][j];

}

}

for(int i=0;i<row;i++){

for(int j=0;j<col;j++){

System.out.print(array[i][j]+"   ");

if(j == col-1)

System.out.println("");

}

}

 

//求最大子数组

sum=array[0][0];

sumTemp=sum;

for(int i=0;i<row;i++){

for(int x=0;x<1000;x++)

arraytemp[x]=0;

for(t=i;t>=0;t--){

    for(int s=0;s<2*col;s++){

    if(t>=0){

    arraytemp[s]+=array[t][s];

    //qx=t;

    //qy=s;

    //System.out.println("&"+qx+" "+qy);

    //System.out.println("%"+arraytemp[s]+"%");

    }

    }

    sumTemp=arraytemp[0];

    m=0;

for(int j=0;j<2*col;j++){//按列消元

if(sumTemp<=0){

sumTemp=0;

m=j+1;

//qx=t;

//qy=j;

//System.out.println("&1 "+qx+" "+qy);

}

//System.out.println("#"+sumTemp+"#");

//System.out.println("*"+arraytemp[j+1]+"*");

if(j+1<qy+col){

sumTemp+=arraytemp[j+1];

if(sumTemp>sum){

sum=sumTemp;

qx=t;

qy=m;

zx=i;

zy=j+1;

    //System.out.println("@"+qx+" "+qy);

    //System.out.println("%"+zx+" "+zy);

}

}

/*else

break;*/

}   

}

}

System.out.println("最大子数组的和为:"+sum);

System.out.println("子数组为:");

for(int i=qx;i<=zx;i++)

for(int j=qy;j<=zy;j++){

System.out.print(array[i][j]+" ");

if(j==zy)

System.out.println("");

}

}

}

 

结果截图:

 

编程总结:

      每次编程并不是重新开始,以前编过的程序都是,后面程序的基础,注意保存以前的成果,编程后梳理编程思路,形成一定的套路和模板会对今后的编程有很大帮助。勇于承认自己的不足,并积极追赶,虚荣心是自己给自己设定的敌人,而不是别人设定的。综上所述,要多和别人交流,产生思维的碰撞,固步自封是愚蠢的做法。

转载于:https://www.cnblogs.com/bdqczhl/p/4445457.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值