找一个数组的最大和的连续子数组(时间复杂度 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 ...
随机推荐
- 【干货】使用SIFT取证工作站校验文件哈希----哈希一致则文件具备完整性
此实验来源于课程活动部分:第1单元:计算机取证基础 1.3活动和讨论 活动:* nix系统中文件的基本散列 注意:本博客更多的信息可能没有交代完善,有的人看不明白是因为,我知道,但是没有写出来.本 ...
- 【easy】Number of Segments in a String 字符串中的分段数量
以空格为分隔符,判断一个string可以被分成几部分. 注意几种情况:(1)全都是空格 (2)空字符串(3)结尾有空格 思路: 只要统计出单词的数量即可.那么我们的做法是遍历字符串,遇到空格直接跳过, ...
- nginx的location配置详解
语法规则: location [=|~|~*|^~] /uri/ { … } =开头表示精确匹配 ^~开头表示uri以某个常规字符串开头,理解为匹配url路径即可.nginx不对url做编码,因此请求 ...
- linux 安装虚拟机
如果虚拟机创建不了就重启电脑 重启时 按下F2 出现后 第二个 往下 有个默认的 那个那个 打开虚拟机 选择第一个 然后是选择语言选择软件里面的 软件选择选择 基本网页服务器(右侧选择 python ...
- c++入门篇七
拷贝构造函数的调用时机: class Person { public: //构造函数 Person() { //无参构造函数 } Person(int a) { //有参构造函数 cout <& ...
- 修改Maven仓库路径
我自己新建的地址:D:\apache-maven-3.6.0\repository 找到:localRepository,修改为自定义的位置 在IDEA里面进行配置 这样项目的maven仓库地址就修改 ...
- P4098 [HEOI2013]ALO
最近这个家伙去哪了,为啥一直不更博客了呢?原来他被老师逼迫去补了一周的文化课,以至于不会把班里的平均分拉掉太多.好了,我们来看下面这道题目: P4098 [HEOI2013]ALO 题目描述 Welc ...
- https请求之绕过证书安全校验相关配置
需在weblogic服务器上配置内存溢出的地方加入一行配置: -DUseSunHttpHandler=true 注:空格隔开 然后调用工具类:https://www.cnblogs.com/ ...
- 简单使用zabbix监控nginx是否存活
1.在agent端修改主配置文件 vim /etc/zabbix/zabbix_agentd.conf ........ ........ UserParameter=nginx.status[*], ...
- 论文阅读笔记五十五:DenseBox: Unifying Landmark Localization with End to End Object Detection(CVPR2015)
论文原址:https://arxiv.org/abs/1509.04874 github:https://github.com/CaptainEven/DenseBox 摘要 本文先提出了一个问题:如 ...