题目:返回一个整数数组中最大子数组的和

要求: 输入一个整形数组,数组里有正数也有负数。 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。 求所有子数组的和的最大值。

思路: 

如输入1 2 3 4 5 -6  7 -8 9 0

从1开始逐步向后加,取最大的记为max[0],同时记录下加到第几个数时得到最大值,记位置为k

从2开始逐步向后加,取最大的记为max[1],同时记录下加到第几个数时得到最大值,记位置为k

从3开始逐步向后加,取最大的记为max[2],同时记录下加到第几个数时得到最大值,记位置为k

......

比较max[0],max[1],max[2],max[....]取最大的记为max1

 

#include <iostream>
using namespace std;
#define N 10

void main(){
int b[N+1];                                 //把输入的数字存储在数组中
int max[N] ,max1,n;                    
int j,k,a,i,g;
max[200] = 0;max1 = 0;
cout<<"please input 10 numbers:"<<endl;
for(j = 0;j<N;j++) cin>>b[j];
for(j = 0;j < N;j++){
a = 0;
for(k = j;k < N;k++){
a+= b[k] ;
if(a>max[j]){
max[j] = a;
n = k;                                //把k的值赋值给n
}
}
if(max[j]>max1){
max1 = max[j];
i = j;
}
}
for(g = i;g < n;g++)
cout<<"连续数组为: "<<b[g]<<" "<<endl;
cout<<"连续数组最大的和为"<<max1<<endl;
}

 

时间复杂度为n2

求最大的和比较容易,主要时间放在了如何把相加和最大的连续数组求出来,关键是如何找到找到相加和最大的连续数组的起止位置。这里用j来表示起始位置,用k来表示止位置

累计用时两个半小时。。。。

转载于:https://www.cnblogs.com/laozhanghahaha/p/4357957.html

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 、4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。、可私 6信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 、4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。、可 6私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 、4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。、可私 6信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值