当前位置: 首页 > 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.wxhsa.cn/company.asp?id=6269

相关文章:

  • RSA 共模攻击
  • 计组博文
  • week1task
  • 《原子习惯》-读书笔记3
  • Linux系统编程笔记总结
  • Java SE 25新增特性
  • linux系统编程09-进程间通信
  • 谈谈语法糖
  • 2025年,秋天与冬天(长期)
  • ssl rsa解密
  • linux系统编程05-标准IO1
  • linux系统编程07-文件IO\系统调用IO
  • linux系统编程06-标准IO2
  • linux系统编程08-高级IO
  • 第03周 预习、实验与作业:面向对象入门2与类的识别
  • 第8篇、Kafka 监控与调优实战指南
  • linux系统编程02-进程基本知识
  • linux系统编程03-并发:信号
  • linux系统编程04-并发:线程
  • 新手高效制作PPT的3个步骤:告别逻辑混乱,从构思到完成!
  • Avalonia:用 ReactiveUI 的方法绑定数据、事件和命令
  • 【pyQT 专栏】程序设置 windows 任务栏缩略图(.ico)教程
  • Say 题选记(9.14 - 9.20)
  • vm的配置
  • 力扣72题 编辑距离
  • 数学基本结构框架
  • 2025.9.16总结
  • 在 Tailscale 中禁用 DNS
  • 软件工程实践一:Git 使用教程(含分支与 Gitee)
  • 【青少年低空飞行玩意】设计图以及项目概况