题目:返回一个整数数组中最大子数组的和
要求: 输入一个整形数组,数组里有正数也有负数。 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。 求所有子数组的和的最大值。
思路:
如输入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来表示止位置
累计用时两个半小时。。。。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端