题目地址:http://www.patest.cn/contests/mooc-ds/01-1

算法一:暴力,直接计算出所有子列和,然后比较,显然复杂度炸裂,O(N^3)

int MaxSubseqSum1(int A[],int N)
{int ThisSum;int MaxSum = 0;int i,j,k;for (i = 0; i < N; ++i)//i是子列左端的位置{for (j = i; j < N; ++j)//j是子列右端的位置{ThisSum = 0;//A[i]到A[j]的子列和for (k = i; k < j ; ++k){ThisSum += A[k];if (ThisSum > MaxSum){MaxSum = ThisSum;}}}}return MaxSum;
}

  算法二:优化第三层循环,将复杂度降到O(N^2)

int MaxSubseqSum2(int A[],int N)
{int ThisSum;int MaxSum = 0;int i,j;for (i = 0; i < N; ++i)//i是子列左端的位置{ThisSum = 0;//A[i]到A[j]的子列和for (j = i; j < N; ++j)//j是子列右端的位置{ ThisSum += A[j];//对于相同的i,不同的j,只要在j-1的基础上累加上1项即可if (ThisSum > MaxSum){MaxSum = ThisSum;}}}return MaxSum;
}

  算法三:分而治之,把数组从中间分成两部分,然后递归地解决左右两边,最后考虑跨越边界的最大值。

复杂度的推算:

int MaxSubseqSum3(int A[],int x,int y)
{if (y-x==1){return A[x];}int mid = x+(y-x)/2;int leftSum = 0;int rightSum = 0;int leftMaxValue = A[m-1];int rightMaxValue = A[m];int i;int maxValue=max(MaxSubseqSum3(a,x,m),MaxSubseqSum3(a,m,y));for (i = mid - 1; i >= x; --i){leftSum += A[i];leftMaxValue = max(leftMaxValue,leftSum);}for (i = m; i < y; ++i){rightSum += A[i];rightMaxValue = max(rightMaxValue,rightSum);}return max(maxValue,leftMaxValue+rightMaxValue);}

  算法四:在线处理,达到理想的复杂度了,O(N)

int MaxSubseqSum4(int A[],int N)
{int ThisSum,MaxSum;int i;ThisSum = MaxSum = 0;for (i = 0; i < N; ++i){ThisSum += A[i];//向右累加if (ThisSum > MaxSum){MaxSum = ThisSum;}else if (ThisSum < 0){ThisSum = 0;}}return MaxSum;
}

  =============================================

最后AC的代码:

#include <cstdio>using namespace std;#define MAXN 100000
int main()
{freopen("in.txt","r",stdin);int list[MAXN];int n,i,;int ThisSum, MaxSum;int head,tail;scanf("%d",&n);int start = 0,end = n-1;for (int i = 0; i < n; ++i){scanf("%d",&list[i]);}    ThisSum = MaxSum = 0;for (int i = 0; i < n; ++i){if (ThisSum >=0){ThisSum += list[i];tail = i;}else{ThisSum = list[i];head = i;tail = i;}if (ThisSum > MaxSum ||(ThisSum == 0 && MaxSum == 0)){MaxSum = ThisSum;start = head;end = tail;}}printf("%d %d %d\n",MaxSum, list[start], list[end]);return 0;
}

  

转载于:https://www.cnblogs.com/acmsummer/p/4209737.html

【数据结构第一周】最大子列和问题整理相关推荐

  1. 浙江大学陈越教授数据结构PTA 题目——最大子列和(在线处理法)

    注意: 1.数组的循环输入要取地址!!!!! for(int i=0;i<K;i++)     {         scanf("%d",&a[i]);     // ...

  2. MOOC学习数据结构--第一周

    1.计算机所处理的数据一般具备某种内在联系,这是指(B ). A.数据和数据之间存在某种关系 B.元素和元素之间存在某种关系 C.元素内部具有某种结构 D.数据项和数据项之间存在某种关系 2.在数据结 ...

  3. 陈越数据结构_第一周

    陈越数据结构_第一周 1. 最大子列和问题 是第一周最后讲到的4种算法的实验题,属于基本要求,一定要做: 题目见PAT 输入样例: 6 -2 11 -4 13 -5 -2 输出样例: 20 1.1 解 ...

  4. 20162302 《程序设计与数据结构》第一周学习总结

    20162302 2017-2018-1 <程序设计与数据结构>第一周学习总结 教材学习内容总结 很多情况下时间和空间不可兼得.在不同的情况下,要么用时间换空间,要么用空间换时间. 引出算 ...

  5. 20172314 2018-2019-1《程序设计与数据结构》第一周学习总结

    教材学习内容总结 概述 软件工程:是一门关于高质量软件开发的技术和理论的学科,用来控制开发过程,实现高质量的软件. 软件工程的目标:正确性.可靠性.健壮性.可用性.可维护性.可重用性.可移植性.运行效 ...

  6. 20162303《程序设计与数据结构》第一周学习总结

    学号 2016-2017-2 <程序设计与数据结构>第1周学习总结 教材学习内容总结 本周学习了基本的JAVA知识,虽然比较基础,但是在实际过程中还是出现了许许多多的问题,代码一遍遍的敲错 ...

  7. 2019-2020-1 1823《程序设计与数据结构》第一周作业总结

    作业地址 第一周作业:https://edu.cnblogs.com/campus/besti/2019-2020-1-1823-PDDS/homework/3466 提交情况如图: 共7人没提交,还 ...

  8. 「数据结构」普林斯顿算法课第一周作业

    「数据结构」普林斯顿算法课第一周作业 Algorithm I, Princeton 编程作业: Percolation 思路 第一部分代码展示 第二部分代码展示 编程作业: Percolation P ...

  9. 2017-2018-2 1723《程序设计与数据结构》第八周作业 实验二 第一周结对编程 总结...

    作业地址 第八周作业:https://edu.cnblogs.com/campus/besti/CS-IMIS-1723/homework/1847 (作业界面已评分,可随时查看,如果对自己的评分有意 ...

最新文章

  1. 仓央嘉措《那一天,那一月,那一年,那一世》
  2. [原]不祥的CPU——Alpha
  3. R可视化散点图并绘制回归曲线
  4. python迭代器生成器使用技巧(2):切片、遍历、索引值、多序列、多容器对象
  5. Android---手动创建线程与GUI线程同步(二)
  6. 内核中的UDP socket流程(5)——inet_create
  7. 采样示波器和实时示波器的原理及优势
  8. 消息栏通知(Notification)介绍
  9. 实验一:彩色空间转换(YUV2RGB)
  10. MSM搭建(Memcached_Session_Manager)--解决集群session共享
  11. 基于SSM的住院病人监测预警信息管理系统毕业设计源码021054
  12. 朱慕慕:ui设计包括什么内容,ui设计包括有几部分内容?
  13. Android 自定义控件玩转字体变色 打造炫酷ViewPager指示器
  14. spring mvc 学习指南一
  15. 《途客圈创业记:不疯魔,不成活》一一2.7 愿景和使命
  16. 谷歌手机pixel4 夜景_Google为您的Pixel手机制作了呼叫筛选机器人
  17. C语言编译时产生的警告:initializing ‘char *‘ with an expression of type ‘const char *‘ discards qualifiers
  18. 设置允许root用户登录SSH
  19. 零差云控(zeroerr)erob80 I型开箱
  20. ARCore---测量

热门文章

  1. Vue2.0 Transition常见用法全解惑
  2. CCAI 2017 中国人工智能大会 6.4 折抢票倒计时!
  3. Json 不同语言的使用
  4. javascript:子窗口和父窗口交互
  5. C语言 学生管理系统
  6. 师范类专业可以不考计算机二级吗,2021师范专业要考教师资格证吗?师范生需要考的证有哪些?...
  7. Incomedia WebSite X5 17中文版
  8. 解决incorrect 'only available in ES6' warning (W119) with options `moz: true, esversion: 6` 报错问题...
  9. java 消息机制 ActiveMQ入门实例
  10. Linux美化——终端提示符