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.4 粘性热传导流体动力学方程组
粘性热传导流体动力学方程组: $$\beex \bea \cfrac{\p \rho}{\p t}+\Div(\rho{\bf u})&=0,\\ \rho \cfrac{\rd {\bf u ...
- LinQ简单增、删、改、查
一.简单介绍 1.LinQ to Sql类(NET Language Integrated Query (LINQ) ) LINQ定义了大约40个查询操作符,如select.from.in.where ...
- 【原创】大叔问题定位分享(28)openssh升级到7.4之后ssh跳转异常
服务器集群之间忽然ssh跳转不通 # ssh 192.168.0.1The authenticity of host '192.168.0.1 (192.168.0.1)' can't be esta ...
- 布思算法Java实现
public String multiply(String Q,String M){ char Q0 = '0'; String A = get01(Q.length(),"0") ...
- Improved dual-mode compressive tracking integrating balanced colour and texture features
<改进的集成平衡颜色和纹理特征的双模压缩跟踪> 摘要:将跟踪问题视为分析目标和背景信息的分类问题的判别跟踪方法可以实现最先进的性能.作为一个高性能判别器,压缩跟踪近来受到很多关注.然而,当 ...
- linux下安装redis并开机自启动
分享一个博客地址, 写的太好了, 满满的都是干货 ! https://www.cnblogs.com/renzhicai/p/7773080.html
- 将日志备份推送到s3存储上
1.将日志备份推送到s3存储上 #!/bin/sh # 此脚本实现将/usr/local/netqin/boss/netqin/logs/BOSS_ContentServer/BOSS_AD_SDK ...
- matplotlib figure图像-【老鱼学matplotlib】
如果我们想要显示多个图像,有点类似多窗口显示图像这个概念,则就会用到plt.figure() 直接上例子: import numpy as np import pandas as pd import ...
- Android CameraManager 类
先看代码: private SurfaceView mSurfaceView; private SurfaceHolder mSurfaceHolder; private CameraManager ...
- Git permission denied(public key) 解决方法
1. 在Linux上: # ssh-keygen ##一定用 id_rsa.pub # cat /root/.ssh/id_rsa.pub 2. copy 整个文件内容到剪切板 3. 打开 ...