返回一个首尾相接的二维整数数组中最大子数组的和
題目:
·返回一個二維整數數組中最大子數組的和。
?
要求:
·輸入一個二維整形數組,數組里有正數也有負數。
·二維數組首尾相接,象個一條首尾相接帶子一樣。
·數組中連續的一個或多個整數組成一個子數組,每個子數組都有一個和。
·求所有子數組的和的最大值。
?
源代碼:
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
總結
以上是生活随笔為你收集整理的返回一个首尾相接的二维整数数组中最大子数组的和的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: springquartz的LocalDa
- 下一篇: [笨木头FireFly 02]入门篇2_