当前位置: 首页 > news >正文

最大子列和问题

1.自己的思路:前缀和,代码如下:
int main()
{
int a[100010]={0};
int b[100010]={0};
int k;
cin>>k;
for(int i=0;i<k;i++)
{
cin>>a[i];
if(i==0)
b[i]=a[i];
else
b[i]=b[i-1]+a[i];
}
int max=0;
for(int i=0;i<k;i++)
{
for(int j=i;j<k;j++)
{
if(max<b[j]-b[i])
{
max=b[j]-b[i];
}
}
}
cout<<max<<endl;
system("pause");
return 0;
}

缺点:
两层嵌套循环,导致当数据很多的时候会运行超时

2.最优解:
KaDane算法(最大子序列算法),能够最大程度减少时间复杂度,优化程序运行时间,本质上是贪心算法的一种
代码如下:
int main()
{
int a[100010]={0};
int k;
cin>>k;
for(int i=0;i<k;i++)
{
cin>>a[i];
}
int max_sum=a[0]; //全局最大和
int current_sum=a[0]; //当前子数组的和
for(int i=1;i<k;i++)
{
//核心逻辑:当前元素要么加入前一子数组,要么单独作为新子数组的节点
current_sum=(current_sum+a[i]>a[i])? (current_sum+a[i]):a[i];
//更新全局最大和
if(current_sum>max_sum)
max_sum=current_sum;
}
cout<<max_sum<<endl;
system("pause");
return 0;
}

核心逻辑:
1.贪心算法,每次多遍历一个节点时,找到在当前节点的最大和
2.更新全局最大和可以理解为数学函数图像中的记录峰值,记录一个个极大值,不断更新最大值,从而将贪心算法的局部最优解转化为全局最优解

http://www.rkmt.cn/news/6412.html

相关文章:

  • week1task
  • 计组博文
  • 《原子习惯》-读书笔记3
  • Java SE 25新增特性
  • linux系统编程09-进程间通信
  • linux系统编程07-文件IO\系统调用IO
  • 第03周 预习、实验与作业:面向对象入门2与类的识别
  • 第8篇、Kafka 监控与调优实战指南
  • linux系统编程02-进程基本知识
  • Say 题选记(9.14 - 9.20)
  • 数学基本结构框架
  • 在 Tailscale 中禁用 DNS
  • 【青少年低空飞行玩意】设计图以及项目概况
  • 20250916 之所思 - 人生如梦
  • 今日学习 dos命令和Java基础语法
  • 课前问题列表
  • office2024免费永久激活安装包下载安装教程包含(下载安装配置激活)
  • 该练习 DP 了!
  • 本周计划
  • PPT文件太大?一招「无损」压缩图片,秒变传输小能手!
  • U3D动作游戏开发读书笔记--2.3 3D游戏所需要的数学知识
  • EF Core 与 MySQL:查询优化详解
  • 短视频营销运营资深导师张伽赫,东莞绳木传媒创始人
  • 9.13日总结
  • 奇思妙想(胡思乱想)
  • C++中set与map的自定义排序方法详解
  • id
  • 缺省源
  • MISC相关
  • 在 Windows 10 上安装 FFmpeg 8.0