找一个数组的最大和的连续子数组(时间复杂度 O(n))
设计思想
一开始的思想是求出全部的情况,再分别比较大小,这种方法适用于有限个数组,不适用于输入数组长度和内容的情况。
但也试着做了
int a[]= {-1,2,6,-10};
int size=4;
int maxa=a[0];
for(int i=0;i<size;i++) {
if(maxa<a[i])
maxa=a[i];
}
//对于两个数一组
int b[]=new int[size-1];
for(int i=0;i<size-1;i++) {
b[i]=a[i]+a[i+1];
}
//再遍历b数组
int maxb=b[0];
int sizeb=size-1;
for(int i=0;i<sizeb;i++) {
if(maxb<b[i])
maxb=b[i];
}
//对于三个数一组
int c[]=new int[size-2];
int sizec=size-2;
for(int i=0;i<sizec;i++) {
c[i]=a[i]+a[i+1]+a[i+2];
}
//再遍历c数组
int maxc=c[0];
for(int i=0;i<sizec;i++) {
if(maxc<c[i])
maxc=c[i];
}
//对于四个数一组
int maxd=0;
for(int i=0;i<size;i++) {
maxd=maxd+a[i];
}
//比较这些组合的大小
int max1=0;
int max2=0;
int max=0;
if(maxa>maxb) {
max1=maxa;
}else {
max1=maxb;
}
if(maxc>maxd) {
max2=maxc;
}else {
max2=maxd;
}
if(max1>max2) {
max=max1;
}else {
max=max2;
}
System.out.println("连续子数组的最大值为:"+max);

这种方法比较傻,下面是我参考了网上的之后自己动手解决的。
设计思想:
把最大值sum赋值为0,curr是当前数值,curr=curr+下一个数 依次类推,若curr为负数,就让curr
为0,否则就判断sum和curr的大小关系,sum=较大的那个数。
Scanner sc=new Scanner(System.in);
//定义数组长度和数组
//输入数组长度
System.out.println("请输入数组的长度:");
int size=sc.nextInt();
int a[]=new int[size];
int sum=0;
int curr=0; //输入数组的内容
System.out.println("请输入数组内容:");
for(int i=0;i<size;i++) {
a[i]=sc.nextInt();
} //有负有正
for(int i=0;i<size;i++) {
curr=curr+a[i];
if(curr<0) {
curr=0;
}else {
if(sum<curr) {
sum=curr;
}else {
sum=sum;
}
}
}
//若全是是负数
if(sum==0) {
int sum1=a[0];
for(int i=0;i<size-1;i++) {
if(sum1>a[i+1]) {
sum1=sum1;
}
else {
sum1=a[i+1];
}
}
sum=sum1;
} System.out.println("连续子数组的最大值为:"+sum);

全是负数的情况

遇到的问题:
1,最开始没有比较curr和sum的大小关系,而直接让sum=curr,会导致sum为最后一个为正的数
2,忘记考虑全是负数的情况,导致全为负数,sum的值=0。
总结:
在设计此类题的时候,要考虑周到,在时间复杂度为o(n)的条件下,把各种情况都要考虑到。
还要多尝试,写出来代码出错后要一步一步推敲错在哪里,分析分解,再锁定错的地方,是解决问题的关键。
找一个数组的最大和的连续子数组(时间复杂度 O(n))的更多相关文章
- 找一个数组的最大和的连续子数组(时间复杂度 O(n))(二)
要求: 要求数组从文件读取. 如果输入的数组很大, 并且有很多大的数字, 就会产生比较大的结果 (考虑一下数的溢出), 请保证你的程序能正常输出. 另外, 如果输入文件的参数有错误, 这个程序应该 ...
- 剑指offer面试题31连续子数组的最大和
一.题目描述 HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学.今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决.但是,如果 ...
- 《剑指Offer》- 连续子数组的最大和或最小和
前言 本文是<剑指Offer>系列(JavaScript版)的第一篇,题目是"连续子数组的最大和或最小和". 话不多说,开始"打怪"修炼... 一. ...
- 个人实战演练全过程——No.1 最大连续子数组求和
之前的一次个人总结和一次单元测试入门学习是开启软件工程课程的前奏曲,也是热身,现在大家对于这门课程也有了初步的了解和认识,这次要开始真正的演奏了,要从头到尾完全靠自己的能力来解决一个问题,进行实战演练 ...
- Task 4 求数组的连续子数组的最大和(团队合作)
小组成员:李敏.刘子晗 1.设计思想:由于已经做过这个题目,只要对之前的程序加上相应的测试和约束即可.我们两个人一起商议后,决定了程序的主框架和并列出了最终可以实现的功能.先要定义数组长度和上下限的变 ...
- lintcode循环数组之连续子数组求和
v 题目:连续子数组求和 II 给定一个整数循环数组(头尾相接),请找出一个连续的子数组,使得该子数组的和最大.输出答案时,请分别返回第一个数字和最后一个数字的值.如果多个答案,请返回其中任意一个. ...
- python实现连续子数组的最大和
题目描述 HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学.今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决.但是,如果向量 ...
- 剑指Offer - 九度1372 - 最大子向量和(连续子数组的最大和)
剑指Offer - 九度1372 - 最大子向量和(连续子数组的最大和)2013-11-23 16:25 题目描述: HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学.今天JOBDU测试组开完会后, ...
- 剑指Offer面试题:28.连续子数组的最大和
一.题目:连续子数组的最大和 题目:输入一个整型数组,数组里有正数也有负数.数组中一个或连续的多个整数组成一个子数组.求所有子数组的和的最大值.要求时间复杂度为O(n).例如输入的数组为{1,-2,3 ...
随机推荐
- Java 多线程 - 锁优化
http://www.cnblogs.com/pureEve/p/6421273.html https://www.cnblogs.com/mingyao123/p/7424911.html
- Object类中方法详解
目录 概述 hashCode方法 getClass方法 toString方法 equals方法 clone方法 finalize方法 概述 Object 是类层次结构的根类.每个类都使用 Object ...
- 肺结节CT影像特征提取(五)——肺结节CT影像ROI区域灰度直方图及其图形化
在博客肺结节CT影像特征提取中,已经实现了肺结节的灰度.纹理和形态特征的提取.但是,对于进一步了解ROI区域像素值或者说CT值的分布来说,还存在一定的不足,不能够很好的显示ROI区域. 因此,本文将进 ...
- 使用nc传输文件和目录【转】
方法1,传输文件演示(先启动接收命令) 使用nc传输文件还是比较方便的,因为不用scp和rsync那种输入密码的操作了 把A机器上的一个rpm文件发送到B机器上 需注意操作次序,receiver先侦听 ...
- expect 批量自动部署ssh 免密登陆 之 三
#!/bin/expect -- ########################################## zhichao.hu #Push the id.pas.pub public k ...
- go语言中使用defer、panic、recover处理异常
go语言中的异常处理,没有try...catch等,而是使用defer.panic.recover来处理异常. 1.首先,panic 是用来表示非常严重的不可恢复的错误的.在Go语言中这是一个内置函数 ...
- jenkins主要目录用途
主目录 除了Jenkins的WAR包所在目录,Jenkins还有一个更重要的目录——Jenkins的所有重要数据都存放在这个独立的目录中,称为Jenkins主目录,它的默认位置是在当前用户根目录的隐藏 ...
- Apollo与ROS
Apollo项目基于ROS,但是对其进行了改造,主要包括下面三个方面: 通信性能优化 去中心化网络拓扑 数据兼容性扩展 通信性能优化 自动驾驶车辆中包含了大量的传感器,这些传感器可能以非常高频的速度产 ...
- python之地基(二)
上一个阶段呢,我们已经学习了python的数据的类型.今天呢,我们来学习各种各样的运算符. 一.基本运算符 a = 10 b = 20 运算符号 描述 示例 + 加——两个对象相加 a+b 输出 ...
- jQuery之cookie操作
Cookies 定义:让网站服务器把少量数据储存到客户端的硬盘或内存,从客户端的硬盘读取数据的一种技术: 下载与引入:jquery.cookie.js基于jquery:先引入jquery,再引入:jq ...