找一个数组的最大和的连续子数组(时间复杂度 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 ...
随机推荐
- [Kubernetes]谈谈容器跨主机网络
继上篇文章:[Kubernetes]浅谈容器网络,自己给自己挖的坑,这篇文章来谈谈容器跨主机网络. 要理解容器"跨主通信"的原理,就要来谈谈 Flannel 这个项目. Flann ...
- EntityFramework6之原生SQL
原文:https://www.cnblogs.com/wujingtao/p/5412329.html 用EF执行SQL又比ADO.NET方便,特别是在执行查询语句的时候,EF会把查询到的数据自动保存 ...
- Windows Server 2012安装.NET Framework 3.5
1 文件获取地址 链接:https://pan.baidu.com/s/1o7wykEKKrzbVslSeHbBigA 提取码:e59o 2 安装原因 在Windows Server 2012上安装一 ...
- linux系统自动备份打包部署脚本
1.使用jenkins配置任务 2.执行脚本放在/home/guard/目录下 #!/bin/sh #author wangxiangyu #当前时间 DATE=$(date +%Y%m%d) #环境 ...
- docker简单介绍---部署私有docker仓库Registry
1. 关于Registry 官方的Docker hub是一个用于管理公共镜像的好地方,我们可以在上面找到我们想要的镜像,也可以把我们自己的镜像推送上去.但是,有时候,我们的使用场景需要我们拥有一个私有 ...
- 【转】Python——plot可视化数据,作业8
Python——plot可视化数据,作业8(python programming) subject1k和subject1v的形状相同 # -*- coding: utf-8 -*- import sc ...
- Vue报错——“Trailing spaces not allowed”
在VSCode中开发Vue 报错:“Trailing spaces not allowed” 这是空格多了,删除多余的空格就可以了
- ORACLE根据两个表都含有的字段条件来判断两个表连接后有没有数据
A表 字段1 字段2 B表 字段1 字段3 A表的字段1=B表的字段1 SELECT DISTINCT A.字段2 FROM TABEL1 A ,TABEL2 B WHERE A.字段1 ...
- flutter 登录后跳转到根路由
flutter 登录以后 会有返回箭头显示 因为 路由的切换导致不是路由的第一个页面,解决办法清空路由. Navigator.of(context).pushAndRemoveUntil( new ...
- MiniGUI 如何显示繁体字
有两种编码格式都可以显示繁体字,一种是GBK,一种是BIG5: 由于MiniGUI官方提供的字库的字体大小太小,所以只得自己去做字库,我用一个字库生成软件,分别做了一个GBK编码的字库和一个BIG5编 ...