博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
二维数组的最大子数组和 时间复杂度:O(n的四次方)
阅读量:5256 次
发布时间:2019-06-14

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

先上代码

小组成员:高达,李奔

 

 

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
list1 = new ArrayList
(); list1=wenjian(b); //转化为数字数组 ArrayList
list = new ArrayList
(); 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
max) { max=sum; } } if(sum==0) { max=a[0]; for(int i=1;i
b) { Integer sum=0; Integer max=0; for(int i=0;i
max) { max=sum; } } if(sum==0) { max=b.get(0); for(int i=1;i
String_To_Integer(ArrayList
list) { ArrayList
list1 = new ArrayList
(); for(int i=0;i
wenjian(String b) { ArrayList
list = new ArrayList
(); 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的使用  为啥出错我们自己的逻辑错误。

实验用时:

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

 

转载于:https://www.cnblogs.com/gonT-iL-evoL-I/p/10588619.html

你可能感兴趣的文章
Linux 进程资源用量监控和按用户设置进程限制
查看>>
IE浏览器整页截屏程序(二)
查看>>
D3.js 之 d3-shap 简介(转)
查看>>
制作满天星空
查看>>
类和结构
查看>>
CSS3选择器(二)之属性选择器
查看>>
adidas crazylight 2018 performance analysis review
查看>>
typeset shell 用法
查看>>
python 之 循环语句
查看>>
心得25--JDK新特性9-泛型1-加深介绍
查看>>
[转]ceph网络通信模块_以monitor模块为例
查看>>
HDOJ 1754 I Hate It(线段树基本操作)
查看>>
Ext.Net学习笔记01:在ASP.NET WebForm中使用Ext.Net
查看>>
latex tree
查看>>
jquery 三级关联选择效果
查看>>
Css 特性之 transition和transform
查看>>
安装NVIDIA驱动时禁用自带nouveau驱动
查看>>
函数调用可视化
查看>>
HDU-1255 覆盖的面积 (扫描线)
查看>>
关于开罗
查看>>