博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
二维数组最大子数组和
阅读量:4956 次
发布时间:2019-06-12

本文共 1549 字,大约阅读时间需要 5 分钟。

package shuzuhe;

import java.util.Random;
import java.util.Scanner;
public class he4 {
    public static void main(String[] args) {
        int a[][];
        int i,j,l,h,n,k,sum,max;
        //随机产生一个数组
        Scanner scanner = new Scanner(System.in);
        System.out.print("输出随机产生的数组的长度:");
        h=scanner.nextInt();
        System.out.print("输出随机产生的数组的高度:");
        l=scanner.nextInt();
        scanner.close();
        a=new int[l][h];
        for(i=0;i<l;i++)
        {
            for(j=0;j<h;j++)
            {
                Random random = new Random();
                a[i][j]=random.nextInt(11);
                a[i][j]=a[i][j]-1;
                System.out.print(a[i][j]);
                System.out.print(" ");
            }
            System.out.println("");
        }
        max=0;
        for(n=0;n<l;n++)
        {
            sum=0;
            for(i=0;i<l-n;i++)
            {
                sum=0;
                for(j=0;j<h;j++)
                {
                    for(k=i;k<=i+n;k++)
                    {
                        sum=sum+a[k][j];
                    }
                    System.out.print(sum);
                    System.out.print(" ");
                    if(sum<0)
                    {
                        sum=0;
                    }
                    if(max<sum)
                    {
                        max=sum;
                    }
                }
            }
        }
        System.out.print(max);
        System.out.println("");            
    }
}

 

网上看了很多可以解决这个问题的代码,有枚举什么的看不太懂,只有这个代码理解了。接下来说说我的理解。

该代码的核心是       

max=0;

        for(n=0;n<l;n++)
        {
            sum=0;
            for(i=0;i<l-n;i++)
            {
                sum=0;
                for(j=0;j<h;j++)
                {
                    for(k=i;k<=i+n;k++)
                    {
                        sum=sum+a[k][j];
                    }
                    System.out.print(sum);
                    System.out.print(" ");
                    if(sum<0)
                    {
                        sum=0;
                    }
                    if(max<sum)
                    {
                        max=sum;
                    }
                }
            }
        }

其他的为随机产生一个二维数组。

以实验数据为例解释一下

运行结果:

输出随机产生的数组的长度:3
输出随机产生的数组的高度:3
-1 4 -1
0 4 8
5 6 0
-1 4 3 0 4 12 5 11 11 -1 8 15 5 15 23 4 18 25 25

首先它的结果的产生是先由一行一行的数字算,例如第一行就是a(1,1),a(1,1)+a(1,2),a(1,1)+a(1,2)+a(1,3),然后2*2的小数字块,最后是3*3的。

首先给max赋值为0,然后max+-1=-1,然后sum值为-1,运行下列if语句

                     if(sum<0)

                    {
                        sum=0;
                    }

使sum值为0,然后sum+4=4,运行下列if语句

if(max<sum)

                    {
                        max=sum;
                    }

最后产生的max即为最大值

但是它的循环部分还是有些不太明白,虽然可以通过结果可以推测出是怎么循环的。

转载于:https://www.cnblogs.com/2205254761qq/p/10590301.html

你可能感兴趣的文章
Myeclipse使用技巧
查看>>
2015.7.31 jquery 的attr和prop
查看>>
让我郁闷了一个早上的事情--变量保护
查看>>
centos7磁盘扩容
查看>>
CSS实现垂直居中的常用方法
查看>>
TCP/IP ---互联网的地址
查看>>
RobotFramework-Selenium2Library--关键字
查看>>
01 - Execise About Array.prototype.reduce()
查看>>
centos6.5安装xen(一)——编译安装xen4.1.3
查看>>
【转】Linux shell笔记
查看>>
hdu 5199 Gunner
查看>>
Java多线程
查看>>
DDR SDRAM芯片DQS的作用以及读写DQS/DQ对齐方式不同的原因
查看>>
一道常被人轻视的前端JS面试题
查看>>
ThinkPHP5从零基础搭建CMS系统(一)
查看>>
智能指针总结
查看>>
Excel导入遇到的问题An object with the same key already exists in the ObjectStateManager……
查看>>
《全栈性能Jmeter》-5JMeter负载与监听
查看>>
csharp: Export DataSet into Excel and import all the Excel sheets to DataSet
查看>>
C++调用android非静态函数
查看>>