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.递归的就是第一个和最后一个对比,然后第一个加一,最后一个减一 ...
随机推荐
- [物理学与PDEs]第2章第2节 粘性流体力学方程组 2.5 粘性热传导流体动力学方程组的数学结构
1. 粘性热传导流体动力学方程组可化为 $$\beex \bea \cfrac{\p \rho}{\p t}&+({\bf u}\cdot\n)\rho=-\rho \Div{\bf u}, ...
- mac下go环境搭建开发web工程
1,golang下载: http://www.golangtc.com/download https://golang.org/ https://beego.me/docs/intro/ 2,安装go
- Database学习 - mysql 视图/触发器/函数
- 函数的if--while流程控制
一.流程控制---if 1.if条件判断 age=18 hight=1.70 sex="female" is_beautiful=True if sex=="female ...
- Stack的相关API
public class Stack<E> extends Vector<E> : Stack类代表后进先出(LIFO)堆栈的对象. 它扩展了类别Vector与五个操作,允许一 ...
- React native 无法弹出调试控件的问题
React Native 在debug模式下,可以通过摇动手机,弹出调试选项.但是今天利用了cocoapods 把react native 文件整理后,调试界面就弹不出了,其他功能正常.查了好久,发现 ...
- PyMysql的LIKE查询%问题
今天写一个模糊匹配的接口的时候,发现PyMysql的防注入方式会将%给转义,就算是写两个%%也是无用,依旧查不出来结果 Google翻了,Baidu翻了,一样没有适用的解决方法. 后来灵机一动想到了方 ...
- Django 序列化-token
幂等性 幂等性:多次操作的结果和一次操作的结果是一样的 ,put请求是幂等的 post请求不是幂等的 序列化组件 全局和局部钩子函数 异常信息抛出过程 认证 路由里的,login.as_view() ...
- VUE中总的逻辑关系和移动端mint-ui的应用接触
1.mint-ui官网:https://mint-ui.github.io/#!/zh-cn 可以点击开始使用,里边有详细的讲解.安装mint-ui: 官网是: 但是应用没有装成功,不知为何,可能是我 ...
- Robot Framework 环境安装(一)
1.安装python:https://www.python.org/2.安装python的第三方库:robotframework (1)检查是否支持pip命令. (2)robotframework安装 ...