一、问题描述

给定一个有n(n >= 1)个整数的序列,求出其中最大连续子序列的和。例如序列(34,-20,30,-50,60,-20,30,41,-30,-10)最大子序列和为111,序列(-2,11,-4,13,-5,-2)最大子序列和为20。规定一个序列的最大连续子序列和至少为0。

二、问题求解

1、对于含有n个整数的序列,若n=1,表示序列仅有一个元素,该元素大于0,则返回该元素,否则返回0。

if(left == right){if(a[left]>=0)return a[left];elsereturn 0;
}

2、如果n>1,则采用分治法求解最大连续子序列和。取中间位置 mid = ( left + right ) /2 。则最大连续子序列和只可能出现在3个地方。

  • ①该子序列全部落在左半部分,即a[0,···mid]中,该问题和原本问题解决方法一样,采用递归求出其最大连续子序列和maxLeftSum
  • ②该子序列全部落在右半部分,即a[mid+1,···n-1]中,该问题和原本问题解决方法一样,采用递归求出其最大连续子序列和maxRightSum
  • ③该子序列跨越序列a的中部而占据左右两部分。也就是说,这种情况下的最大连续子序列和必然包括mid元素,则先求出maxLeftBorderSum从mid(终点)到left的最大连续子序列和找到左边最大连续子序列和的起点位置,将左边到mid的最大连续子序列和赋值给maxLeftBorderSum。再求出maxRightBorderSum从mid(起点)到right的最大连续子序列和,找到右边最大连续子序列和的终点位置,将mid到右边的最大连续子序列和赋值给maxRightBorderSum。这种情况下的最大连续子序列和为 maxMidSum =maxLeftBorderSum+maxRightBorderSum
    3、整个序列a的最大连续子序列和为maxMidSum 、maxLeftBorderSum、maxRightBorderSum。将三者进行大小比较即为最终结果。

三、完整代码展示(C语言)

//求解最大连续子序列和问题
#include<stdio.h>
int num[10] = {34,-20,30,-50,60,-20,30,41,-30,-10};
//int num[6] = {-2,11,-4,13,-5,-2};
int max3(int a,int b,int c){ //求三者的最大值if(a < b)a = b;if(a < c)a = c;return a;
}
int maxSubSum(int a[],int left,int right){int i,j;int maxLeftSum,maxRightSum;int maxLeftBorderSum,leftBorderSum;int maxRightBorderSum,rightBorderSum;if(left == right){  //只有一个元素的情况if(a[left]>=0) return a[left];elsereturn 0;}int mid = (left+right)/2; //取中间位置maxLeftSum = maxSubSum(a,left,mid); //求左边的最大序列和maxRightSum = maxSubSum(a,mid+1,right); //求右边的最大序列和maxLeftBorderSum = 0;leftBorderSum = 0;maxRightBorderSum = 0;rightBorderSum = 0;
//最大连续子序列在序列a的中部而占据左右两部分情况for(i=mid;i>=left;i--){ //求mid到左边的maxLeftBorderSumleftBorderSum += a[i];if(maxLeftBorderSum < leftBorderSum)maxLeftBorderSum = leftBorderSum;}for(j=mid+1;j <= right;j++){ //求mid到右边的maxRightBorderSumrightBorderSum += a[j];if(maxRightBorderSum < rightBorderSum)maxRightBorderSum = rightBorderSum;}return max3(maxRightBorderSum,maxLeftBorderSum,maxLeftBorderSum+maxRightBorderSum);
}int main(){printf("maxSubSum= %d\n",maxSubSum(num,0,9));return 0;
}

求解最大连续子序列和问题———分治法相关推荐

  1. 求解最大连续子序列和问题(Java)蛮力法+分治法

    求解最大连续子序列和问题 [问题描述] 给定一个有n(n>=1)个整数的序列,要求求出其中最大连续子序列的和. [样例输入] 6 -2 11 -4 13 -5 -2 [样例输出] 20 [问题求 ...

  2. 蛮力法 —— 求解最大连续子序列和问题

    问题:求解最大连续子序列和问题 题目: 给定一个有n(n>=1)个整数的序列,求解其中最大连续子序列的和.规定一个序列的最大子序列和至少为0,若结果小于0,则其结果为0 例:序列(-2,11,- ...

  3. 求解最大连续子序列和问题----蛮力法

    文章预览 问题:求解最大连续子序列和问题 思路一:穷举法 思路二:穷举法 思路三:穷举法 问题:求解最大连续子序列和问题 题目: 给定一个有n(n>=1)个整数的序列,求解其中最大连续子序列的和 ...

  4. 算法分析:采用蛮力法(循环) 求解最大连续子序列和问题。给定一个有n(n≥1)个整数的序列,要求求出其中最大连续子序列的和。 例如: 序列(-2,11,-4,13,-5,-2)

    一.效果图 二.源代码 package sy4; import java.util.Scanner; /** * @author * */ public class Sy4_2 { static vo ...

  5. 【算法】求解最大连续子序列和问题

    程序代码: #include <stdio.h> #define max(x,y) ((x)>(y)?(x):(y)) #define MAXN 20 //问题表示 int n = ...

  6. 【算法】求解最大连续子序列和的问题

    #include <stdio.h> long max3(long a, long b, long c) //求出3个long中的最大值 {if (a > b) a = b; //用 ...

  7. 动态规划法求解最大连续子序列和问题

    问题描述 给定一个有n(n≥1)个整数的序列,要求求出其中最大连续子序列的和. 例如 序列(-2,11,-4,13,-5,-2)的最大子序列和为20 序列(-6,2,4,-7,5,3,2,-1,6,- ...

  8. 蛮力法求解最大连续子序列和问题

    问题描述 给定一个有n(n≥1)个整数的序列,要求求出其中最大连续子序列的和. 例如: 序列(-2,11,-4,13,-5,-2)的最大子序列和为20 序列(-6,2,4,-7,5,3,2,-1,6, ...

  9. 四种解法——求子序列的最大连续子序和(普通解法、求和解法、分治法、O(n)级解法)(面试经典题)

    励志用少的代码做高效表达 在这四种解法里,解法一是通法,可以学到规律和知识,做基础之用:解法二在解法一的基础上做改进,锻炼思维:解法三则是大名鼎鼎的分治法,涉及到递归的知识,算是"高效算法设 ...

  10. 《github一天一道算法题》:分治法求数组最大连续子序列和

    看书.思考.写代码. /**************************************** copyright@hustyangju * blog: http://blog.csdn.n ...

最新文章

  1. 为什么做好数据安全这么难?黑客太牛?
  2. vue可视化拖拽生成工具_vue实现可视化可拖放的自定义表单的示例代码
  3. mysql sign_mysql - 随笔分类 - signheart - 博客园
  4. Robust line matching through line–point invariants
  5. 一文看懂:边缘计算究竟是什么?为何潜力无限?(上)
  6. 想做个磁力链搜索引擎 1
  7. 图片分享和加载失败的原因之一
  8. Python编码错误的解决办法SyntaxError: Non-ASCII character '\xe5' in file
  9. Pycharm配置(1)——解释器(interpreter)
  10. 一文看懂韦恩图和欧拉图的不同
  11. 【福利】小程序开发资源干货汇总
  12. 乐高机器人纲要_人工智能与机器人课程纲要
  13. matlab如何镜像处理图片,matlab实现图像镜像
  14. Unity简单实现老虎机抽奖效果
  15. 计算机开机屏幕英语,电脑开机进不了系统,屏幕一堆英文数字怎么办?别急有方法...
  16. 联合搜索:搜索中的所有需求
  17. 新版Zotero插件更新
  18. Python网络爬虫学习实战:爬虫快速入门
  19. yolov5跌倒检测。可以检测跌倒,坐立,下蹲,正常行走。可 以绘制各种训练指标曲线。
  20. vegas不可识别格式素材怎么处理?

热门文章

  1. MySQL小数数据类型
  2. OpenGl 之学习笔记 glNormal3f 函数理解和光源相关知识总结
  3. 三十.基于国民MCU 的COMP与ADC结合的实战功能模拟案例
  4. JavaScript的prototype是什么?
  5. Elasticsearch:Apache spark 大数据集成
  6. 2012年真的是世界末日吗?_全球关注
  7. Ubuntu 20.04 + mysql 8.0.27 用户名和密码修改(非常实用)
  8. Word一行有空白格,却无法输入新的文字
  9. 龙门浩职高计算机学校,重庆市龙门浩职业中学校|龙门浩职高是公办还是民办院校/文凭怎么样/是什么性质...
  10. SDI科普--- SD-SDI/HD-SDI/3G-SDI/12G-SDI