(c语言)Maximum Subsequence Sum (25分)
发布日期:2021-06-30 22:22:27 浏览次数:2 分类:技术文章

本文共 1420 字,大约阅读时间需要 4 分钟。

关于数据结构Mooc后的每一道答案 基本我都已经给出了详解

希望能对大家有所帮助 收藏一下也是方便大家查找吧

下面图片是谷歌机翻这道题的翻译

在这里插入图片描述
作为大一新生在才学完C再马上学习数据结构难免有些地方有纰漏 表达的一些话有点问题 希望大家一起共勉 加油!


我的思路如下:

在这篇博客中我只分享如何找位置的核心思想 第一题不会可以搜一下我的博客有详细解答哈

末位置

我们需要把暂时子列和刚开始大于现有子列和的位置标记下来 这很简单 就比如我们又有暂时子列和大于现有子列和时 当我们进行替换时 我们用来遍历的 i 就是当前的末位置 最难的就是如何找到我们的子列和首位置呢

首位置

此时我就想到了利用count计数功能 比如现在子列和在向前走了4个数字 然后对最大子列和进行替换了 那么首位置是不是就是一定是末位置减去(count-1)的位置呢qwq 哇哦~ 当子列和小于0时 我们就将子列计数的count和子列清零就可以了 是不是非常的客来碗呢~

实现代码如下

#include 
//定义最大数组长度哈#define max 100000//这里是对如果一直是负数的negative进行判断//定义了一个bool值typedef int bool;#define true 1#define false -1int main(){
long n; int i; int a[max] ={
0}; //最大子列和 long maxtotal=0; //暂时子列和 long temptotal=0; long firpos=0,endpos=0; //计数功能 long tempcount = 0; scanf("%ld",&n); //对判断是不是全是负数的 bool值进行赋初值 bool negative = true; for(i=0;i
maxtotal) {
//初位置的赋值就是上面思路的 firpos = a[i-tempcount+1]; //末尾置的赋值随着i的改变而改变 endpos = a[i]; maxtotal = temptotal; } else if(temptotal < 0 ) {
temptotal = 0; tempcount = 0; } //如果当有存在0或者正数时 全是负数的判断为错误的 if(a[i] >=0) negative = false; } //对全是负数情况进行处理 if(negative == true && maxtotal == 0) {
firpos = a[0]; endpos = a[n-1]; } printf("%ld %ld %ld\n",maxtotal,firpos,endpos); return 0;}

这也就是我的解题思路了 希望能对大家有所启发 我也是刚开始学

和大家一起共勉

转载地址:https://love6.blog.csdn.net/article/details/110311304 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:(c语言)二分查找 (20分)
下一篇:(c语言)最大子列和问题 (20分)

发表评论

最新留言

路过,博主的博客真漂亮。。
[***.116.15.85]2024年04月28日 20时31分31秒