,,  在本周的课堂上,老师再一次提高了要求,将一维数组升级成为了二维数组,然后求出块状的连续子数组。

  一开始还想着借鉴之前球一维数组的O(n)的算法,后来还是没有找到头绪,舍友讲了自己的办法,但是没有去仔细去问,也就不了了之,他的那个虽然是O(n四次方)的算法,但是好在实现起来比较简便一点。

  后来想了想没有想出来,查看相关的资料,找到了和之前求一维数组类似的方法,就是直接将这个二维数组降维,将它压缩成一维数组,这样讲可能不太好理解,下面举一个例子,来阐释这个方法:

  我们首先设置一个数组:,在这种情况下,我可以将它看成一个一维数组,然后求出它的最大子数组,在这种情况下,则需要将,看成三个一维数组中的元素,然后求出它们的最大子数组。依次类推,我们可以求出剩下的情况等。

  既然知道了怎么做,那么剩下的就是通过遍历来算出所有额最大值,并将他们放入到数组中,然后再通过一次遍历来获得最大的块状连续子数组即可。

public class Main {
static int length=0;//长度是指这个块状的长度(所占的列数
static int max_i=0;
static int line=3;
static int list=4;
static int start=0;//start是指开始的列数,即从第几列开始形成块状数组
static int sumList=(int) (list*(list+1)*0.5);//设置一个储存所有最大子数组的数组
static int []maxsum=new int[sumList];
private static void max(int p[][]) {
int remaining=list-start;
int max = 0;
int tempsum=0;
for(int z=0;z<remaining;z++) {
for(int j=0;j<line;j++) {
if(length<1) {//这个是只有一列时候的特殊情况
tempsum=tempsum+p[j][start];
if(j==0)
max=tempsum;
if(tempsum>max) {
max=tempsum;
}
if(tempsum<0){
tempsum=0;
}
}else {
for(int i=start;i<(length+1+start);i++) {
if(i>(list-1)) {
break;
}
tempsum=tempsum+p[j][i];
if(j==0)
max=tempsum;
if(tempsum>max) {
max=tempsum;
}
if(i>=(length+start)) {
if(tempsum<0){
tempsum=0;
}
}
}
}
}
length++;
maxsum[max_i]=max;
max_i++;
tempsum=0;
}
start++;
length=0;
}
private static int MAX(int max[]) { System.out.println("输出最大值数组:");
for(int i=0;i<max.length;i++){
System.out.print(max[i]+"\t");
}
int max_=0;
for(int i=0;i<max.length;i++){
if(max[i]>max_){ //求出最大值
max_=max[i];
}
}
System.out.println("\n最大值:"+max_);
return 0; }
public static void main(String[] args) {
// TODO Auto-generated method stub
int[][] p= {{5,-3,6,7},
{-12,5,7,-34},
{5,7,21,4}};//设置一个数组
for(int i=0;i<list;i++) {
max(p);
}
MAX(maxsum); } }

    

Java课程课后作业190315之最大连续子数组(二维数组版)的更多相关文章

  1. Java课程课后作业190315之从文档中读取随机数并得到最大连续子数组

    从我上一篇随笔中,我们可以得到最大连续子数组. 按照要求,我们需要从TXT文档中读取随机数,那在此之前,我们需要在程序中写入随机数 import java.io.File; import java.i ...

  2. Java课程课后作业190309之连续最大子数组

    老师在课堂是提出了这个问题,并且提出了时间复杂度是O(n)的要求,一开始我自己思想简单,在逻辑上出现了十分粗心的错误,后来同学们也在课堂上比较激烈地讨论了一番,也只是将时间复杂度降到了O(n*n),在 ...

  3. java基础:进制详细介绍,进制快速转换,二维数组详解,循环嵌套应用,杨辉三角实现正倒直角正倒等腰三角,附练习案列

    1.Debug模式 1.1 什么是Debug模式 是供程序员使用的程序调试工具,它可以用于查看程序的执行流程,也可以用于追踪程序执行过程来调试程序. 1.2 Debug介绍与操作流程 如何加断点 选择 ...

  4. java课程课后作业190425之一维数组最大子数组(界面实现)

    题目要求: 1.在第一个问题过程中,我在以前的代码中好像已经写出了这个功能,想要实现这个功能,我们只需要在我们储存的数组和是负数的时候对中转值进行重新赋值就可以得到新的数值的起始位置,而他的终了位置就 ...

  5. JAVA课程课后作业03之作业一

    作业:使用类的静态字段和构造函数,可以跟踪某个类所创建对象的个数.请写一个类,在任何时候都可以向它查询“你已经创建了多少个对象?”. 代码: package TestJava; import java ...

  6. java课程课后作业190616之个人学期总结

    在团队开始的那一周,我们做了作品的功能畅想,在讲台上谈论了自己的产品可能会有的功能,比如说课程查找功能,空教室查找功能,霸屏功能,课程留言功能等,当然,随着开发的推进,我也发现了有些功能上实现的困难, ...

  7. java课程课后作业05之动手动脑

    一.使用Files. walkFileTree()找出指定文件夹下所有大于指定大小(比如1M)的文件 此代码没有使用walkfiletree,两者的差别在于walkfiletree在遍历文件的时候有一 ...

  8. java课程课后作业04之动手动脑

    一.多层的异常捕获-1 先贴出代码: public class CatchWho { public static void main(String[] args) { try { try { thro ...

  9. JAVA课程课后作业03之动手动脑

    一.构造函数 问题一: 错误代码如图: 错误原因:从图片中的编译报错的地方来看,程序是在给新的对象分配空间是出现了问题,因而我们往下观察Foo类,Foo类的构造方法是有一个参数的有参方法,而前面构造新 ...

随机推荐

  1. 目标检测网络之 YOLOv3

    本文逐步介绍YOLO v1~v3的设计历程. YOLOv1基本思想 YOLO将输入图像分成SxS个格子,若某个物体 Ground truth 的中心位置的坐标落入到某个格子,那么这个格子就负责检测出这 ...

  2. 第30月第6天 git log

    1. git log git log 96a6f18b1e0a1b7301cb4f350537d947afeb22bc -p -1 我们常用 -p 选项展开显示每次提交的内容差异,用 -2 则仅显示最 ...

  3. 使用tablayout和recyclerview的时候,报重复添加Fragment错误

    原因: 在添加的子Fragment报错了, 出现了空值错误, 此时报出来错误是前一个Fragment重复添加

  4. 高性能JS(读书札记)

    第一章:加载和执行 1.1脚本位置 将js脚本放在body底部 1.2组织脚本 文件合并,减少http请求(打包工具) 1.3无阻塞的脚本 js倾向于阻止浏览器的某些处理过程,如http请求和用户界面 ...

  5. WSL用xshell连接

    编辑配置文件 sudo vim /etc/ssh/sshd_config Port 8022(因为 Windows 10 的 SSH 端口已经默认被占用,所以我换成了一个新的端口) (去掉前面的 #) ...

  6. 【原创】大叔经验分享(10)Could not transfer artifact org.apache.maven:maven. from/to central. Received fatal alert: protocol_version

    maven编译工程报错 [ERROR] Failed to execute goal net.alchim31.maven:scala-maven-plugin:3.2.2:add-source (s ...

  7. 【原创】大叔问题定位分享(2)spark任务一定几率报错java.lang.NoSuchFieldError: HIVE_MOVE_FILES_THREAD_COUNT

    最近用yarn cluster方式提交spark任务时,有时会报错,报错几率是40%,报错如下: 18/03/15 21:50:36 116 ERROR ApplicationMaster91: Us ...

  8. greenplum加密

    --如下为greenplum5.0数据库加解密--加密函数select encrypt('123456','aa','aes');--加解密函数select convert_from(decrypt( ...

  9. iOS -- Effective Objective-C 阅读笔记 (6)

    1: 在 既有类中使用 关联对象存放自定义数据 有时候需要在对象中存放相关信息, 这是我们经常会从对象所属的类中继承一个子类, 然后改用这个子类对象, 然而并非所有的情况下都能这么做,  有时候类的实 ...

  10. VMware虚拟机安装Linux系统后IP配置(二)

    1.在NAT模式下自动获取IP 2.编辑网卡配置文件(通用) 3.Ctrl+L 清屏.重启网络服务后检查网络是否正常上网 修改后本机IP地址在linux中ping通本机IP 然而在本机却ping不通l ...