找一个数组的最大和的连续子数组(时间复杂度 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 ...
随机推荐
- 项目Alpha冲刺(1/10)
1.项目燃尽图 2.今日进度描述 项目进展 熟悉Android Studio的基本使用,阅读代码规范 问题困难 学习中存在许多问题. 心得体会 应该选择一个自己熟悉的平台进行开发. 3.会议照片 4. ...
- Python简单爬虫获取岗位招聘人数
#encoding=utf-8 import selenium import selenium.webdriver import re import time # pip install seleni ...
- ESP8266莫名重启或者死机问题
多半是内存使用不当 1. 如果你要用很大长度的数组,那么可以换用更小的数据类型.比如,int值要占用两个字节,你可以用byte(只占用一个字节)代替: 2. esp8266有时会莫明重启,大部分 ...
- C# emgu 多模板匹配
public MatchInfo GetMatchPos(string Src, string Template) { MatchInfo myMatchInfo = new MatchInfo(); ...
- tp5.1入口文件隐藏
修改.htaccess文件 <IfModule mod_rewrite.c> Options +FollowSymlinks -Multiviews RewriteEngine On Re ...
- java - day008 -final ,static ,访问控制符.
面向对象 封装 类: 模板 对象: 实例 引用,遥控器 构造方法 新建对象时执行 ...
- Java的慢和稳
对Java的了解还有待进一步提升,也没有做太多实践工作.只是把脑袋当成电脑,把Java放在里边不停地转,观察它的线路.得到的总体印象加上书本参考,认为Java的应用场景是慢和稳. 学编程语言总会接触到 ...
- linux工具-journalctl查询日志
有时候,当linux服务启动失败的时候,系统会提示我们使用journalctl -xe命令来查询详细信息,定位服务不能启动的原因. journalctl 用来查询 systemd-journald 服 ...
- 一次String的错误使用
今日,在写代码的过程中,程序执行一个方法居然出现了heap space溢出的异常. 从来还没有遇到这样的异常,打断点发现是做字符串拼接时出现此异常. 所以知道了是String使用的异常,因为我做的操作 ...
- 大数据学习之HDFS基本API操作(上)06
package it.dawn.HDFSPra; import java.io.FileNotFoundException; import java.io.IOException; import ja ...