子数组求和最大问题 20131011

问题描述

一个数组中,有整数也有复数,求这个数组的所有子数组中,求和最大的值。

这是一个动态规划问题,乍看上去没有什么简单的方法,把所有的情况列出来就可以了,但是时间复杂度太高了,不是一个很好的算法,必须改变方法。

我们分解问题,就是b[i] 表示以a[i]结尾的子数组最大的和,那么我们可以动态规划,也可以叫做贪心算法。

对于b[i] = max( b[i-1] + a[i], a[i]);

因为对于a[i]结尾的子数组,最大的和有两种情况,一个是他自己,一个是把之前的b[i-1]也加上去。如果b[i-1] > 0 则是选择b[i-1]+a[i] ,反之 选择a[i].

代码:

int getMaxSubArraySum(const int arr[], int &start, int &end , const int length ){

int b = 0, maxSum = 0;

int s =0, e= 0;

for( int  i = 0 ; i < length ; ++i){

if(b > 0 ){

b += arr[i];

e = i;

}else{

b = arr[i];

s = i;

e = i;

}

if(maxSum < b){

start = s;

end = e;

maxSum = b;

}

}

return maxSum;

}

int main()

{

int a[] = {1,-2,3,10,-4,7,2,-5};

int start = 0;

int end = 0;

cout << "max sum is " << getMaxSubArraySum(a,start,end,sizeof(a)/sizeof(int)) << endl;

cout << "start:" << start << endl;

cout << "end  :" << end << endl;

return 0;

}

追梦的飞飞

于广州中山大学 20131011

HomePage: http://yangtengfei.duapp.com

Algorithm4.子数组求和贪心的更多相关文章

  1. lintcode循环数组之连续子数组求和

    v 题目:连续子数组求和 II 给定一个整数循环数组(头尾相接),请找出一个连续的子数组,使得该子数组的和最大.输出答案时,请分别返回第一个数字和最后一个数字的值.如果多个答案,请返回其中任意一个. ...

  2. lintcode-402-连续子数组求和

    [402-连续子数组求和(http://www.lintcode.com/zh-cn/problem/continuous-subarray-sum/) 给定一个整数数组,请找出一个连续子数组,使得该 ...

  3. 个人实战演练全过程——No.1 最大连续子数组求和

    之前的一次个人总结和一次单元测试入门学习是开启软件工程课程的前奏曲,也是热身,现在大家对于这门课程也有了初步的了解和认识,这次要开始真正的演奏了,要从头到尾完全靠自己的能力来解决一个问题,进行实战演练 ...

  4. lintcode :continuous subarray sum 连续子数组之和

    题目 连续子数组求和 给定一个整数数组,请找出一个连续子数组,使得该子数组的和最大.输出答案时,请分别返回第一个数字和最后一个数字的值.(如果两个相同的答案,请返回其中任意一个) 样例 给定 [-3, ...

  5. Java实验——输出二维数组连续二维子数组的最大和

    该算法思路,根据我博客里面一维子数组求和的思路,可以用一个新的二维数组对该二维区域的数组进行求和,例如新的二维数组的第5个位置,就代表从1到5斜对角线的块状区域的和,即1,2,4,5这4个数的和,x个 ...

  6. 求数组的子数组之和的最大值III(循环数组)

    新的要求:一维数组改成循环数组,只是涉及简单算法,只是拿了小数做测试 想法:从文件读取数组,然后新建数组,将文件读取的数组在新数组中做一下连接,成为二倍长度的数组,然后再遍历,将每次遍历的子数组的和存 ...

  7. 求数组的子数组之和的最大值II

    这次在求数组的子数组之和的最大值的条件下又增加了新的约束:  1.要求数组从文件读取.      2.如果输入的数组很大,  并且有很多大的数字,  就会产生比较大的结果 (考虑一下数的溢出), 请保 ...

  8. lintcode:子数组之和为0

    题目: 子数组之和 给定一个整数数组,找到和为零的子数组.你的代码应该返回满足要求的子数组的起始位置和结束位置 样例 给出[-3, 1, 2, -3, 4],返回[0, 2] 或者 [1, 3]. 解 ...

  9. [LeetCode] Subarray Sum Equals K 子数组和为K

    Given an array of integers and an integer k, you need to find the total number of continuous subarra ...

随机推荐

  1. hdu6215 Brute Force Sorting

    地址:http://acm.split.hdu.edu.cn/showproblem.php?pid=6215 题目: Brute Force Sorting Time Limit: 1000/100 ...

  2. Lua 数学类

    数学类主要有Vec2(坐标向量).Size(尺寸).Rect(矩形). 创建 在Lua中创建的 Vec2.Size.Rect 都是一个table类型. 其中只有相应的成员变量,没有相关的函数运算. c ...

  3. “凯易迅Calix”实习上机——打折问题

    题目要求: 题目记得不太清楚,大概的意思是一个商店的打折方案如下:设一个客户买了n个商品,价格分别是p1,p2,...,pn (1)第一个商品不打折,即cost=p1; (2)第i个商品的折扣d=mi ...

  4. 页面渲染是否结束 与 jquery插件方法是否可以应用

    只有页面全部 渲染结束,才可以调用 插件的方法. 正确写法: $(function(){ 插件调用方法. })

  5. Django学习笔记之django-debug-toolbar使用指南

    介绍 django-debug-toolbar 是一组可配置的面板,可显示有关当前请求/响应的各种调试信息,并在单击时显示有关面板内容的更多详细信息. github地址 文档地址 安装 pip3 in ...

  6. 爬虫框架Scrapy之案例二

    新浪网分类资讯爬虫 爬取新浪网导航页所有下所有大类.小类.小类里的子链接,以及子链接页面的新闻内容. 效果演示图: items.py import scrapy import sys reload(s ...

  7. Asp.net mvc word预览与打印

    解决方案: 1. 在后台把word文件转化成pdf,在前台用iframe显示pdf,打印iframe,即可. 优点:用户体验好. 缺点:不支持IE. 实现 : 引用netoffice组件 主要代码: ...

  8. jni使用问题总结

    参考: https://blog.csdn.net/fred_lzy/article/details/53159138 https://blog.csdn.net/avi3/article/detai ...

  9. 在阿里云服务器上搭建 Apache Tomat 应用

    在阿里云上购买一台服务器,系统采用 window 2008 Server 企业版,64位 1.下载Java7 JRE,安装 http://www.java.com/zh_CN/download/man ...

  10. vue iview组件表格 render函数的使用

    如果要在标签中加入属性,例如img 中src属性 a标签中href属性 此时需要用到 attrs 来加入而不是props { title: '操作', key: 'action', align: 'c ...