先上代码

小组成员:高达,李奔

package 三月二十一号;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern; public class Main1 { public static void main(String[] args) {
// TODO 自动生成的方法存根 //读取
int max=0;
int sum=0;
String b="E:\\大二\\软件工程\\java\\src\\三月二十一号\\input.txt";
ArrayList<String> list1 = new ArrayList<String>();
list1=wenjian(b);
//转化为数字数组
ArrayList<Integer> list = new ArrayList<Integer>();
list=String_To_Integer(list1);
//获取行数与列数
final int LINENUMBER=list.get(0);
final int COLUMN_NUMBER=list.get(1);
// System.out.println(LINENUMBER);
// System.out.println(COLUMN_NUMBER);
int a[]=new int[COLUMN_NUMBER];
//几行求解
for(int i1=1;i1<=LINENUMBER;i1++)
{
//N1-i1+1次
for(int i2=1;i2<=LINENUMBER-i1+1;i2++)
{ //给数组赋值
for(int j=0;j<COLUMN_NUMBER;j++)
{
for(int i3=0;i3<i1;i3++)
{
a[j]=a[j]+list.get((i2-1)*COLUMN_NUMBER+j+2+i3*COLUMN_NUMBER);
//System.out.println(a[j]);
}
}
//求这行的最大值
sum=max_int_Array(a);
//System.out.println(sum);
//比较
if(max<sum)
{
max=sum; }
//重置数组a
for(int i=0;i<a.length;i++)
{
a[i]=0;
}
}
} System.out.println(max);
}
//求一行
static Integer max_int_Array(int a[])
{
Integer sum=0;
Integer max=0;
for(int i=0;i<a.length;i++)
{
sum=sum+a[i];
if(sum<0)
{
sum=0;
}
if(sum>max)
{
max=sum;
}
}
if(sum==0)
{
max=a[0];
for(int i=1;i<a.length;i++)
{
if(max<a[i])
{
max=a[i];
}
}
}
return max; }
/*之前的代码但是还是觉得int[]好用
//求一行
static Integer max_int_Array(ArrayList<Integer> b)
{
Integer sum=0;
Integer max=0;
for(int i=0;i<b.size();i++)
{
sum=sum+b.get(i);
if(sum<0)
{
sum=0;
}
if(sum>max)
{
max=sum;
}
}
if(sum==0)
{
max=b.get(0);
for(int i=1;i<b.size();i++)
{
if(max<b.get(i))
{
max=b.get(i);
}
}
}
return max; }
*/
//转化成整数数组
public static ArrayList<Integer> String_To_Integer(ArrayList<String> list)
{
ArrayList<Integer> list1 = new ArrayList<Integer>();
for(int i=0;i<list.size();i++)
{
Integer integer =new Integer(list.get(i));
list1.add(integer);
}
return list1; }
//读取
public static ArrayList<String> wenjian(String b)
{
ArrayList<String> list = new ArrayList<String>();
boolean flag=true;
try // 建立一个对象,它把文件内容转成计算机能读懂的语言
{
Scanner shuru = new Scanner(new BufferedReader(new FileReader(b)));
String a;
//网友推荐更加简洁的写法
while ((shuru.hasNext()) ) {
// 一次读入一行数据
a=shuru.next();
if(isNumeric(a))
{
list.add(a);
}
else
{
flag=false;
} }
shuru.close();
} catch (IOException e) { e.printStackTrace();
}
if(flag==true)
{
return list;
}
else
{
System.err.println("文件格式有错误,退出");
return null;
}
}
//判断是不是数字
public static boolean isNumeric(String str){
Pattern pattern = Pattern.compile("-[0-9]+(.[0-9]+)?|[0-9]+(.[0-9]+)?");
Matcher isNum = pattern.matcher(str);
if( !isNum.matches() ){
return false;
}
return true;
}
}

成功结果:

我和我小组成员的思路是:

我(高达)提出的:建一个类来封装一行的一维正块,然后根据一维正块上下求索正块矩形,比较出最大值。时间复杂度:O(n的三次方)

但是逻辑上很难实现,做不了。

上课的时候有人说就是一行比然后俩行比然后三行比依次类推求出最大,然后我们就是使用的这种方法。时间复杂度:O(n的四次方)

实验过程:

先使用ArrayList<String>存储取出来的数字,存储的时候用正则来判断是否为数字,然后转化为ArrayList<Integer>存储,List的第一个是行数,第二个是列数,然后逻辑上2号位是第一个数字。

这个问题的解决关键是

1.理清关系,上下差一个列数。

2.当一行比的时候比n次,俩行比n-1次……n行比1次。

实验时遇到的问题:

方法意见不统一,我和小组成员有分歧,我一直坚持我的那种思路,但是我们认为实现起来太难了。

代码实现时的逻辑出现了俩次错误,i1 i2 i3 j   i3和j的关系  i2和i1的使用  为啥出错我们自己的逻辑错误。

实验用时:

三小时(讨论+写代码+改代码)

二维数组的最大子数组和 时间复杂度:O(n的四次方)的更多相关文章

  1. 蚂蚁的难题(二)首尾相连数组的最大子数组和(DP)

    蚂蚁的难题(二) 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述 下雨了,下雨了,蚂蚁搬家了. 已知有n种食材需要搬走,这些食材从1到n依次排成了一个圈.小蚂蚁对每种食材 ...

  2. 软件工程结对开发——返回一个整数数组中最大子数组的和(JAVA)

    题目:返回一个整数数组中最大子数组的和. 要求: 输入一个整型数组,数组里有正数也有负数: 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和: 求所有子数组的和的最大值.要求时间复杂度为 ...

  3. 求一个数组的最大子数组(C/C++实现)

    最大子数组:要求相连,加起来的和最大的子数组就是一个数组的最大子数组.编译环境:VS2012,顺便说句其实我是C#程序员,我只是喜欢学C++. 其实这是个半成品,还有些BUG在里面,不过总体的思路是这 ...

  4. 求解数组环中最大子数组和的问题(java)

    //石家庄铁道大学 信1405-1 班 唐炳辉 在上一次作业中,对于普通数组的最大子数组的求解问题的基础上,将普通的数组变成一个首尾相接的环,求这个环的最大子数组.类似的,只要改变普通数组的数组位置, ...

  5. nyoj983 首尾相连数组的最大子数组和

    首尾相连数组的最大子数组和 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描述 给定一个由N个整数元素组成的数组arr,数组中有正数也有负数,这个数组不是一般的数组,其首尾是 ...

  6. nyoj 983 ——首尾相连数组的最大子数组和——————【最大子串和变形】

    首尾相连数组的最大子数组和 时间限制:1000 ms  |  内存限制:65535 KB 难度:4   描述 给定一个由N个整数元素组成的数组arr,数组中有正数也有负数,这个数组不是一般的数组,其首 ...

  7. NYOJ 745 首尾相连数组的最大子数组和

    首尾相连数组的最大子数组和 时间限制:1000 ms  |  内存限制:65535 KB 难度:4   描述 给定一个由N个整数元素组成的数组arr,数组中有正数也有负数,这个数组不是一般的数组,其首 ...

  8. nyoj--983--首尾相连数组的最大子数组和(动态规划)

    首尾相连数组的最大子数组和 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描述 给定一个由N个整数元素组成的数组arr,数组中有正数也有负数,这个数组不是一般的数组,其首尾是 ...

  9. 求二维数组的最大子数组———曹玉松&&蔡迎盈

    继上节课老师让求了一维数组最大的子数组后,这节课堂上,老师加深了难度,给了一个二维数组,求最大子数组,开始觉得很容易,但是自己思考起来感觉这个算法很困难,既需要考虑数组直接的连续,又要求出最大的,老师 ...

  10. 结对开发五--对一千个数long型的一维数组求最大子数组的和

    一.设计思想 我们根据第一个实验,再让他自动生成1000个随机long型数.大致思想和实验一一样,自己已埋入炸弹. 二.实验代码 package com.minirisoft; import java ...

随机推荐

  1. go [第一篇]初识

    [第一篇] 简介 Go 是一个开源的编程语言,它能让构造简单.可靠且高效的软件变得容易. Go是从2007年末由Robert Griesemer, Rob Pike, Ken Thompson主持开发 ...

  2. python数字常量

    数学常量 pi 数学常量 pi(圆周率,一般以π来表示) e 数学常量 e,e即自然常数(自然常数).

  3. spring boot启动项的问题

    <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot ...

  4. 20175204 张湲祯 2018-2019-2《Java程序设计》

    Arrays和String单元测试 一.类的作用 1.- String类 charAt String的charAt的作用是将字符串中第i个位置上的字符(从0开始计数)赋值给n,其用法为n=string ...

  5. 微信支付errcode:40163,code been used,错误小结

    1.配置时注意,支付平台中的支付授权目录, 注意大小写. 昨天碰到的问题,就是自己跳转时,路径写的全小写.跳转支付页面也能跳转过去,但是log中总是调用两次code,报40163错误.后改成和公总号支 ...

  6. leveldb(ssdb)性能、使用场景评估

    最近有个业务场景存储压力很大,写远远大于读,读也集中在最近写入,想想这不很适合采用leveldb存储么.leveldb的话好像用ssdb比较多,花了两天时间就ssdb简单做下测试,以下总结. ssdb ...

  7. 一位6年老Android面经总结

    声明|作者:android进阶者地址:https://www.jianshu.com/p/d77873cbad5f 前言 准备面试其实已经准备了挺久了,当时打算面试准备了差不多以后,跟公司谈谈涨薪的事 ...

  8. 仓鼠找sugar

    洛谷P3398 仓鼠找sugar 题目传送门 参考 \(whm\) 大佬的博客 这儿 代码不难,难在思路上. 令 \(X = lca(a,b) Y = lca(c,d)\) 仓鼠 \((cs)\) 的 ...

  9. C++简单交换堆排序的代码

    下面的内容内容是关于C++简单交换堆排序的内容,应该对各位朋友有较大用途. { int start, end; { }} { int root, child; { if((child + 1 < ...

  10. 拦截请求并记录相应信息-springboot

    方式: 1.FIlter过滤器 2.interceptor拦截器 3.Aspect切片 一.Filter过滤器形式 只能处理request中的数据  不能确定请求要走的是哪个controller信息 ...