最大子数组一

Posted gsdrkj

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了最大子数组一相关的知识,希望对你有一定的参考价值。

题目:返回一个整数数组中最大子数组的和。

要求:输入一个整形数组,数组里有正数也有负数。 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。 求所有子数组的和的最大值。

设计思想:

  利用动态规划的思想,将该问题转化成计算包含当前数组元素以及不包含当前数组元素的子数组之间的较大者,并向前递推,最后变成计算第一个元素和0之间的较大者,从而解决了该问题。

源代码:

 1 //计算一列数组中最大子数组之和,李青,胡金辉
 2 #include<iostream>
 3 using namespace std;
 4 #define max(x,y)  ( x>y?x:y )
 5 int main()
 6 {
 7     int i,length=0,list[1000];//定义循环变量、数组长度、数组
 8     int sum1;//记录包含当前数组元素的最大子数组之和
 9     int sum2;//记录不包含当前数组元素的最大子数组之和
10     cout << "请输入数组元素:" << endl;
11         while ((cin >> list[length++] ) && getchar() != \'\\n\');
12         cout << "你输入了" << length << "个数" << endl;
13     
14     sum1 = list[0];
15     sum2 = 0;
16     for (i = 1; i < length; i++)
17     {
18         sum2 = max(sum2, sum1);
19         sum1 = max(sum1 + list[i], list[i] );
20     }
21     sum1 = max(sum2, sum1);
22     cout << "你输入的数组中最大子数组的值为:"<<sum1<<endl;
23     return 0;
24 }

结果截图:

 

 

总结:

  本次实验主要运用到了动态规划的思想,一开始并不是太清楚该思想是什么意思,后来在老师的解释下明白了,最后写出了程序,总的来说这次还是有很大收获的。

项目计划总结:

日期/任务 听课 编程 阅读相关书籍 网上查找资料 日总计
周一 100 20 10 10 140
周二   30   10 40
周三   100 30 20 150
周四 100 30     130
周五   30   20 50
周六   30 30   60
周日          
周总结 200 240 70 60 570

 

时间记录日志

日期 开始时间 结束时间 中断时间 净时间 活动 备注
3/21 14:00 15:50 10 100 听课 软件工程上课
  16:00 16:20 0 20 编程  
  16:30 16:40 0 10 阅读相关书籍 《构建之法》
  17:00 17:10 0 10 网上查找资料  
3/22 19:00 19:30 0 30 编程  
  19:40 19:50 0 10 网上查找资料  
3/23 14:00 16:00 20 100 编程  
  16:30 17:00 0 30 阅读相关书籍 《梦断代码》
  17:10 17:30 0 20 网上查找资料  
3/24 14:00 15:50 10 100 听课 软件工程上课
  19:00 19:30 0 30 编程  
3/25 19:00 19:30 0 30 编程  
  20:00 20:20 0 20 网上查找资料  
3/26 9:00 9:30 0 30 编程  
  10:00 10:30 0 30 阅读相关书籍 《构建之法》

 缺陷记录日志:

日期 编号 类型 引入阶段 排除阶段 修复时间 备注
3/22 1 20 编码 编译 1min 未定义变量sum2
3/25 2 20 编码 编译 1min 循环嵌套输出错误

 

结对开发伙伴:胡金辉  http://www.cnblogs.com/hujinhui/

 

工作照:

以上是关于最大子数组一的主要内容,如果未能解决你的问题,请参考以下文章

NC41 最长无重复子数组/NC133链表的奇偶重排/NC116把数字翻译成字符串/NC135 股票交易的最大收益/NC126换钱的最少货币数/NC45实现二叉树先序,中序和后序遍历(递归)(代码片段

LeetCode 1800. 最大升序子数组和

分治法求解最大子段和问题

课堂测试总结-数组

译丨Yarn - Javascript 新一代套件管理

leetcode-53 maximum-subarray(最大子序和)