本次的题目是:返回一个整数数组中最大子数组的和
要求:
1.输入一个整形数组,数组里有正数也有负数。
2.数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。
3.求所有子数组的和的最大值。要求时间复杂度为O(n)
分析:
当我们求出的累加和加上一个正数的时候,整个累加和就会增加,当我们的累加和加上一个负数的时候,整个累加和就会减小,我们用一个变量max保存累加和的最大值,另外,我们的累加和如果为负数的时候,如果继续加数不把累加和清零的话,那么整个和就会减小,因此如果累加和为负,就把累加和清零,最后,起初的max值为0,如果循环完后max的值继续为0,则说明数组里的数,全为负数,全为0,有0有负数。那么只需要求数组最大值即可。
#include<iostream> using namespace std; #define N 1000 int main() { int num,value,max=0; int val[N]; int Array[N]; int firstNum=0,lastNum=0; cout<<"输入数的个数:"; cin>>num; for(int i=0;i<num;i++) { cin>>val[i]; } value=0; for(int i=0;i<num;i++) { value=value+val[i]; if(value>max) { max=value; lastNum=i; } if(value<0) { value=0; firstNum=i+1; } } if(max==0) { max=val[0]; firstNum=0; lastNum=0; for(int j=0;j<num;j++) { if(max<val[j]) { max=val[j]; firstNum=j; lastNum=j; } } } cout<<"最大子数组是:"; for(int i=firstNum;i<=lastNum;i++) { cout<<val[i]<<" "; } cout<<endl; cout<<"最大子数组的和为:"; cout<<max<<endl; }
实验总结:本项目看上去不是太复杂,但是非常讲究算法,两个人结对开发,一起讨论,一起想解决方案,一起网上查找算法,更加锻炼了结对开发的能力。
项目计划总结:
日期&&任务 | 听课 | 编写程序 | 阅读相关书籍 | 网上查找资料 | 日总计 |
周一 | 100 | 25 | 25 | 15 | 165 |
周二 | 30 | 35 | 25 | 90 | |
周三 | 60 | 15 | 35 | 110 | |
周四 | 100 | 30 | 30 | 25 | 185 |
周五 | 180 | 15 | 195 | ||
周六 | 60 | 15 | 75 | ||
周日 | 15 | 15 | |||
周总计 | 200 | 325 | 180 | 130 | 835 |
时间记录日志
日期 | 开始时间 | 结束时间 | 中断时间 | 净时间 | 活动 | 备注 |
3/21 | 14:00 | 15:50 | 10 | 100 | 听课 | 软件工程上课 |
17:10 | 17:20 | 10 | 阅读书籍 | 《构建之法》《梦断代码》 | ||
21:00 | 21:25 | 20 | 网上查找资料 | |||
3/22 | 14:00 | 15:00 | 10 | 110 | 结对编程 | 编写老师布置的作业 |
16:00 | 17:00 | 10 | 110 | 看书 | 《构建之法》《梦断代码》 | |
3/23 | 21:00 | 21:30 | 30 | 结对编程 | 编写老师布置的作业 | |
3/24 | 14:00 | 15:50 | 10 | 100 | 听课 | 软件工程上课 |
3/25 | 16:00 | 18:00 | 120 | 结对编程 | 编写老师布置的作业 | |
3/26 | 9:00 | 9:30 | 30 | 看书 | 《构建之法》《梦断代码》 | |
3/27 | 9:00 | 9:30 | 30 | 看书 | 《构建之法》《梦断代码》 |
缺陷记录日志:
日期 | 编号 | 类型 | 引入阶段 | 排除阶段 | 修复时间 | 修复缺陷 |
3月22日 | 1 | 编码 | 编码 | 0.2min | ||
缺少头文件 | ||||||
2 | 编码 | 运行 | 3min | |||
重复使用变量i,导致无限运行 | ||||||
3月25日 | 3 | 编码 | 编译 | 1min | ||
if条件中用了“=”运算符 | ||||||
4 | 编码 | 编译 | 1min | |||
缺少; | ||||||
5 | 编码 | 编译 | 0.2min | |||
for的结尾再次使用i++,导致i加了两次 |
小组成员:杨超群 http://www.cnblogs.com/linumy/