Java课程课后作业190309之连续最大子数组
老师在课堂是提出了这个问题,并且提出了时间复杂度是O(n)的要求,一开始我自己思想简单,在逻辑上出现了十分粗心的错误,后来同学们也在课堂上比较激烈地讨论了一番,也只是将时间复杂度降到了O(n*n),在下课之后也没有讨论出一个最终的结果。
但是当时我的同桌已经大概想出了大致的解决思路,当时由于临近下课我也没有继续做过多的思考,后来在网上参考算法的时候,觉得当时同桌的想法的确和答案差不多了。
由于我们需要的时间复杂度是O(n),所以我们一定能得到的就是,我=我们只能通过一个遍历将结果求出,那么就不可能将所有的子数组全部求出,因为想要全部求出则需要O(n*n)的复杂度,所以我们需要再遍历的时候就得直接寻找最大的子数组。
我们不难想到,当数组的前几位或是第一位是负数的时候,我们可以直接忽略跳到第一个正数来开始计算。
当一连串的正数或是一个正数后面的一连串负数和或是一个负数比之前的正数和都要大的话,这个正的连续子数组就应该不会被包含在最大的子数组中,我们可以举例:2,3,-4,-8,9,2,当遇到这种情况的时候,我们就需要舍弃前面的正数数组,这样才能取到后面的最大子数组。在一开始的时候我也想到这种方法,但是一开始我对这个算法还是理解错了,我误认为如果后面的正数数组如果大于这个负的数组的时候就可以将前面的正数数组一块合并,但是我忽略了一个重要的问题,就是合并的前提是前面的正数数组可以使整个连续的数组数值变得更大,可想而知,情况并不会这样发生。所以我们在编程的时候,只需要设置一个变量来表示从第一个正数开始相加的连续数组,并且每加一个数值就和0进行比较,如果这个连续数组的和已经小于0,那么就可以将它初始化0,即舍弃掉前面的连续数组,因为加上前面的数组只会使得后面的连续数组变小。如果大于0,则和最大值比较,大于则替换,小于则继续加下一个数值,如此遍历至结束,最终的最大值就是结果。
实现代码如下:
public static void main(String[] args) {
int[] array = new int[]{/*请自行添加数组元素*/};
int maxSum = 0;
int TempSum = 0;
for (int i = 0; i < array.length; i++) {
TempSum += array[i];
if(TempSum > maxSum)
{ maxSum =TempSum ; }
else if (
TempSum
< 0) {
TempSum = 0; }
}
System.out.println(maxSum);
}
Java课程课后作业190309之连续最大子数组的更多相关文章
- Java课程课后作业190315之从文档中读取随机数并得到最大连续子数组
从我上一篇随笔中,我们可以得到最大连续子数组. 按照要求,我们需要从TXT文档中读取随机数,那在此之前,我们需要在程序中写入随机数 import java.io.File; import java.i ...
- Java课程课后作业190315之最大连续子数组(二维数组版)
,, 在本周的课堂上,老师再一次提高了要求,将一维数组升级成为了二维数组,然后求出块状的连续子数组. 一开始还想着借鉴之前球一维数组的O(n)的算法,后来还是没有找到头绪,舍友讲了自己的办法,但是没有 ...
- JAVA课程课后作业03之作业一
作业:使用类的静态字段和构造函数,可以跟踪某个类所创建对象的个数.请写一个类,在任何时候都可以向它查询“你已经创建了多少个对象?”. 代码: package TestJava; import java ...
- java课程课后作业190616之个人学期总结
在团队开始的那一周,我们做了作品的功能畅想,在讲台上谈论了自己的产品可能会有的功能,比如说课程查找功能,空教室查找功能,霸屏功能,课程留言功能等,当然,随着开发的推进,我也发现了有些功能上实现的困难, ...
- java课程课后作业190425之一维数组最大子数组(界面实现)
题目要求: 1.在第一个问题过程中,我在以前的代码中好像已经写出了这个功能,想要实现这个功能,我们只需要在我们储存的数组和是负数的时候对中转值进行重新赋值就可以得到新的数值的起始位置,而他的终了位置就 ...
- java课程课后作业05之动手动脑
一.使用Files. walkFileTree()找出指定文件夹下所有大于指定大小(比如1M)的文件 此代码没有使用walkfiletree,两者的差别在于walkfiletree在遍历文件的时候有一 ...
- java课程课后作业04之动手动脑
一.多层的异常捕获-1 先贴出代码: public class CatchWho { public static void main(String[] args) { try { try { thro ...
- JAVA课程课后作业03之动手动脑
一.构造函数 问题一: 错误代码如图: 错误原因:从图片中的编译报错的地方来看,程序是在给新的对象分配空间是出现了问题,因而我们往下观察Foo类,Foo类的构造方法是有一个参数的有参方法,而前面构造新 ...
- JAVA课程课后作业之使用递归完成回文
一.思路 1.我的想法是利用数组的做法来进行,先是用scanner录入一个String类 2.然后就是将String转化成char数组 3.递归的就是第一个和最后一个对比,然后第一个加一,最后一个减一 ...
随机推荐
- Oracle使用PLSQL导入数据后中文乱码的解决方法
新建环境变量 名:NLS_LANG 值:SIMPLIFIE DCHINESE_CHINA.ZHS16GBK 保存后重启PLSQL Developer 重新导入. 如果还是乱码,将上面8的环境变量值改为 ...
- 071、如何定制calico网络的IP池(2019-04-16 周二)
参考https://www.cnblogs.com/CloudMan6/p/7571272.html 在前面的学习中,我们没有特别配置,calico会自动为网络分配subnet,当然我们也可以根据 ...
- JDBC Template
JDBC Template 1. Spring JDBC Spring框架对JDBC的简单封装,提供了一个JDBCTemplate对象用来简化JDBC的开发 步骤: 导入jar包 创建JDBCTemp ...
- nginx反向代理-解决前端跨域问题
1.定义 跨域是指a页面想获取b页面资源,如果a.b页面的协议.域名.端口.子域名不同,所进行的访问行动都是跨域的,而浏览器为了安全问题一般都限制了跨域访问,也就是不允许跨域请求资源.注意:跨域限制访 ...
- SQL SERVER 2008 服务器登录名、角色、数据库用户、角色、架构的关系
sql server登录名.服务器角色.数据库用户.数据库角色.架构区别联系 1.一个数据库用户可以对应多个架构(架构是表容器).架构里面包含的是数据库表. 2.一个数据库角色有可能涉及多个架构.数据 ...
- struts2简单入门-配置文件-struts.xml
struts.xml 作用:配置struts中的action,result,package,全局action,result,等等. 基本文件格式: <?xml version="1.0 ...
- word20161227客厅家电
1.Applicances 厨房.清洁用家电 2.Electronics 电视.音箱类家电 3.White goods 七八十年代家电基本都是白色的,所以流行叫白色家电,至今沿用 4.sleek an ...
- pythonのdjango初体验
简单的一个列表展示,实现了增.删.插 1.通过新建项目来创建一个Django项目 2.通过pycharm中的Terminal来创建app ,命令如下: python manage.py start ...
- 2017-2018-2 20155303『网络对抗技术』Exp6:信息收集与漏洞扫描
2017-2018-2 20155303『网络对抗技术』 Exp6:信息收集与漏洞扫描 --------CONTENTS-------- 一.原理与实践说明 1.实践内容 2.基础问题 二.实践过程记 ...
- SecureCRT的安装与破解(过程很详细!!!)
SecureCRT的安装与破解(过程很详细!!!) 使用SecureCRT可以方便用户在windows环境下对linux主机进行管理,这里为大家讲一下SecureCRT的破解方法,仅供大家参考学习: ...