最大子段和问题什么意思(最大子段和动态规划)

2022-07-22 16:38:18  浏览:310  作者:管理员
  • 最大子段和问题什么意思(最大子段和动态规划)

  • 【商户信息】

  • 类目:知识大全


  • 联系人:


  • 微信号:

  • Q Q 号:

  • 手机号:

  • 浏览量:

    310


【货源详情】


从今天开始,我们正式开始了数据结构的学习。 可以说这是计算机专业中最核心的课程,也是最重要的内容。

这一部分,是企业招聘时最为看重的一部分,也是大家解决算法实现逻辑最为重要的一部分,更是帮助大家找到一份好工作的重要筹码。

我们今天的这道题呢,就是解决“最大子列和问题”。

给定K个整数组成的序列{N1,N2,…,NK},“连续子列”被定义为{Ni,Ni+1,…,Nj},其中1=ijK,而“最大子列和”则是找到一个所有连续子列元素的和中的最大值。

比方说给定一组序列为{-2,11,-4,13,-5,-2},其中连续子序列{11,-4,13}则是最大值为20。

那么最终打印输出的结果则为20。

梳理逻辑

解决函数问题,特别是数据结构和算法问题,要静下心来,理清问题的逻辑。 当然,现在不太会也很正常。 可以慢慢来,但如果你要找工作,那就要加把劲。

1、输入第一行给出正整数K(=100000),用到一个scanf函数来输入。

2、第二行给出K个整数,因为我们是一个序列,所以用到的是数组。

3、最麻烦的则是找出最大和的子序列,我们可以这样来理解:

先从数组中的第一个元素开始加起,找到包含第一个元素的所有子序列的和,并比较大小。

然后找出最大值的和,记录下来。

与此同时,下一次循环遍历的时候就把这个和清零,但是最大值不变。

依次继续求和,并与最大值比较大小,记录下相对较大的那个值。

在所有循环都结束后,最终的那个最大值则是我们要求的最大值。

代码实现

//最大子列和问题

#includestdio.h

int main ()。

int K; //给出正整数k

int M[100000]; 给出//k个整数

int count; //计数法

int SUM=0; //遍历合计

int MAX=0; //初始最大值为0

scanf('%d ',k );

for(intI=0; iK; I ) {

scanf('%d ',M[i] );

if(m ) I )0) {

出局;

() ) ) ) )。

() ) ) ) )。

if(count==k ) )//如果所有数都为0

打印('0);

() ) ) ) )。

for(intI=0; i K; I ) {

//从元素1开始

SUM=0; ) )每次循环加法运算时,加法运算必须为0

for(intj=I; j K; j ) {

SUM=SUM M[j];

if(summax ) {

MAX=SUM;

() ) ) ) )。

() ) ) ) )。

() ) ) ) )。

printf('%d ',MAX );

() ) ) ) )。

结果测试

总结

这个数据结构问题可以说是数据结构一章中最简单的主题。 困难还在后头。 我也知道研究生马上就要毕业了,必须迅速提高实力。 秋天的募集末班车和春天的募集开始。 一定来得及。 请向前冲。 呃! 呃!

评论区

共0条评论
  • 这篇文章还没有收到评论,赶紧来抢沙发吧~

【随机新闻】

返回顶部