您的位置:首页 > 其它

结对开发-返回一个整数数组的最大子数组的和

2016-03-26 11:24 225 查看
日期&&任务

听课编写程序阅读相关书籍网上查找资料日总计
周一1001030140
周二12030150
周三30101050
周四10020120
周五120 30150
周六456010155
周日
周总计20033580110765

时间记录日志

3/21

日期开始时间结束时间中断时间净时间活动备注
3/2114:0015:5010100听课软件工程上课
21:0421: 206 10阅读书籍《构建之法》
22:1022: 400 30网上查找资料
3/2221:0021:3020120编写程序结对开发- 子数组之和
22: 1522: 450 30网上查找资料
3/2319: 2520: 00530编写程序结对开发- 子数组之和
22:0022: 201010阅读书籍《构建之法》
22:4022: 50010查找资料
3/2414:0015: 5010100上课软件工程上课
18:2618: 504 20编写程序结对开发- 子数组之和
3/2514: 0016: 2020120编写程序结对开发- 子数组之和
11:2312: 00730网上查找资料
3/267: 209: 3030100阅读书籍阅读《构建之法》
10: 0011: 001545编写程序结对开发- 子数组之和
9: 459: 55010网上查找资料
缺陷记录日志

日期编号类型引入阶段排除阶段修复时间备注
3/24120编码编译4实参与形参类型对应问题
3/24220编码编译1申请了动态空间未释放
3/253 20 编码 编译 7当数组长度为0时,无法正常跳出
一、题目及题目要求

1、输入一个整型数组,数组里有正数也有负数;

2、数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和;

3、求所有子数组的和的最大值,要求时间复杂度为O(n)。

二、设计思路

一开始想用枚举法完成程序,即把所有子数组都算出来。但因为从第一个算一遍,再从第二个算一遍,用到双重循环显然不满足时间复杂度的要求。后来在同学指导下了解到动态规划解决此类问题符合要求。所以自学了动态规划的内容,http://baike.baidu.com/link?url=-XGpWNVCf5_LA6ox8XjXGRcYjP0sMoO88mERMNd7T7keBTHx4cTHrmgkTjOkJLxHsV5bPjbnMPb9NeE_FvTVPq(百度百科动态规划)。

以下本题算法:

抽象为数学模型即给定由n个整数(可能为负整数)组成的序列a1, a2,…, an, 求该序列形如

的子段和的最大值。当所有整数均为负整数时定义其最大子段和为0。依此定义,所求的最优值为:


1)分析问题最优解的结构

若记b[j]=

, 1≤i≤n,则所求最大子段和为:


由b[j]的定义易知,当b[j-1]>0时, b[j]=b[j-1]+a[j], 否则, b[j]=a[j]。

2)建立递归方程

b[j]=max{b[j-1]+a[j], a[j]}, 1≤j≤n

三,代码

/*2016.3.22 weilihua fengyutong*/
#include<iostream>
#include<iostream>
#include<time.h>
using namespace std;
#define NUM 100000
int DTGH_Sum(int a[],int n) //动态规划法求子段和函数
{
int sum = 0;
int *b = (int *) malloc(n * sizeof(int));    //动态为数组分配空间
b[0] = a[0];
for(int i = 1; i < n; i++)
{
if(b[i-1] > 0)
b[i] = b[i - 1] + a[i];
else
b[i] = a[i];
}
for(int j = 0; j < n; j++)
{
if(b[j] > sum)
sum = b[j];
}
delete []b;        //释放内存
return sum;
}
int main()
{
int length=0;
while (length==NULL||length == 0)//如果数组长度为空或零则请重新输入
{
cout<<"请输入数组长度:";
cin>>length;
}
int a[NUM];
cout<<"输入数组元素:"<<endl;
for(int i=0;i<=(length-1);i++)
{
cin>>a[i];
}
cout<<"最大子段和:";
cout<<DTGH_Sum(a,length)<<endl;
return 0;

}


四、运行截图







同组的小伙伴:/article/5561809.html

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: