二维数组的最大子数组和 时间复杂度:O(n的四次方)
先上代码
小组成员:高达,李奔

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的四次方)的更多相关文章
- 蚂蚁的难题(二)首尾相连数组的最大子数组和(DP)
蚂蚁的难题(二) 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 下雨了,下雨了,蚂蚁搬家了. 已知有n种食材需要搬走,这些食材从1到n依次排成了一个圈.小蚂蚁对每种食材 ...
- 软件工程结对开发——返回一个整数数组中最大子数组的和(JAVA)
题目:返回一个整数数组中最大子数组的和. 要求: 输入一个整型数组,数组里有正数也有负数: 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和: 求所有子数组的和的最大值.要求时间复杂度为 ...
- 求一个数组的最大子数组(C/C++实现)
最大子数组:要求相连,加起来的和最大的子数组就是一个数组的最大子数组.编译环境:VS2012,顺便说句其实我是C#程序员,我只是喜欢学C++. 其实这是个半成品,还有些BUG在里面,不过总体的思路是这 ...
- 求解数组环中最大子数组和的问题(java)
//石家庄铁道大学 信1405-1 班 唐炳辉 在上一次作业中,对于普通数组的最大子数组的求解问题的基础上,将普通的数组变成一个首尾相接的环,求这个环的最大子数组.类似的,只要改变普通数组的数组位置, ...
- nyoj983 首尾相连数组的最大子数组和
首尾相连数组的最大子数组和 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 给定一个由N个整数元素组成的数组arr,数组中有正数也有负数,这个数组不是一般的数组,其首尾是 ...
- nyoj 983 ——首尾相连数组的最大子数组和——————【最大子串和变形】
首尾相连数组的最大子数组和 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 给定一个由N个整数元素组成的数组arr,数组中有正数也有负数,这个数组不是一般的数组,其首 ...
- NYOJ 745 首尾相连数组的最大子数组和
首尾相连数组的最大子数组和 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 给定一个由N个整数元素组成的数组arr,数组中有正数也有负数,这个数组不是一般的数组,其首 ...
- nyoj--983--首尾相连数组的最大子数组和(动态规划)
首尾相连数组的最大子数组和 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 给定一个由N个整数元素组成的数组arr,数组中有正数也有负数,这个数组不是一般的数组,其首尾是 ...
- 求二维数组的最大子数组———曹玉松&&蔡迎盈
继上节课老师让求了一维数组最大的子数组后,这节课堂上,老师加深了难度,给了一个二维数组,求最大子数组,开始觉得很容易,但是自己思考起来感觉这个算法很困难,既需要考虑数组直接的连续,又要求出最大的,老师 ...
- 结对开发五--对一千个数long型的一维数组求最大子数组的和
一.设计思想 我们根据第一个实验,再让他自动生成1000个随机long型数.大致思想和实验一一样,自己已埋入炸弹. 二.实验代码 package com.minirisoft; import java ...
随机推荐
- Android Studio安装后配置默认新工程目录以及.gradle,.android,.m2和system,config目录
关于在哪里设置:以下所有设置都是在没有打开工程的前提下设置的, Configure > Settings 如图: 不要使用 Configure > Project Defaults> ...
- HTTP协议 详解
前言 掌握HTTP协议是每一个开发者的基础,超详细的HTTP协议笔记 正文 HTTP协议格式总览 HTTP line HTTP Method(方法) 介绍了我们请求希望执行的操作类型. 方法有: GE ...
- 解决微信小程序wepy真机预览跟本地表现不一样,数据变化了视图没变化
当时搜了很多相关问题都没找到相似的 只看到有这个相似的描述wepy在onLoad里修改data-object的值页面不渲染 ,通过setData解决的. 但是这个还不是根本的解决办法,有些地方用set ...
- dubbo基本信息
1.Dubbo是什么? Dubbo是阿里巴巴开源的基于 Java 的高性能 RPC 分布式服务框架,现已成为 Apache 基金会孵化项目. 面试官问你如果这个都不清楚,那下面的就没必要问了. 官网: ...
- find 命令局部小结之 xtime
大家在使用find命令的时候往往会使用它的 -name 或者 -xtime,在这里就说下他的xtime. find / -mtime +7 .find / -mtime -7.find / -mti ...
- .Net core----mongodb在插入数据时,会产生时间差的问题
今天在给mongodb插入日期格式的数据时发现,日期时间相差8个小时,原来存储在mongodb中的时间是标准时间UTC +0:00,而中国的时区是+8.00 . 因此在插入的时候需要对时间进行处理: ...
- Arrays类的运用,二分法,数组的复制,命令行参数的运用,二维数组,Object,equals
/*Arrays jdk中为了便于开发,给开发者提供了Arrays类, 其中包含了很多数组的常用操作.例如快速输出.排序.查找等.*/ import java.util.Arrays; public ...
- codeblocks 配置 opengl 编程宝典 的 gltools 环境
懒得多说,亲测,这个问题,csdn 和 cnblog 上的博客真的没有一个能解决的. 这个帖子2L的答案则完美解决了问题,虽然步骤有些繁琐,过程还是英文,但考虑到了可能出现的各种问题,跟着走一遍就完美 ...
- 链表详解(C语言)
链表是一种常见的基础数据结构,结构体指针在这里得到了充分的利用. 链表可以动态的进行存储分配,也就是说,链表是一个功能极为强大的数组,他可以在节点中定义多种数据类型,还可以根据需要随意增添,删除,插入 ...
- openv
https://www.cnblogs.com/xishuai/p/centos-openvpn.html https://www.cnblogs.com/biaopei/category/11029 ...