要求:
结对开发
1.输入一个整数数组,数组里有正数也有负数
2.数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和
3.求所有子数组的和的最大值。要求时间复杂度为O(n)
思路:
看到题目后与队友商量,打算挨个求出每个子数组的和,再进行比较,可是计算特别麻烦。老师让同学上去讲他的思路发现用动态规划这样的思路写出来特别简单,下课后和队友讨论了用动态规划求数组和的思路
用三个数组number[]用来存用户输入的数组元素;Arr[j][0]指前j个元素中,不包含Arr[j]的子数组中和最大的值;Arr[j][1]指前j个元素中,包含Arr[j]的子数组中和最大的值,从第一个元素开始循环到求出最后一对Arr[j][0]和Arr[j][1],再比较其大小,利用max()函数求两个中最大值,输出最大的子数组之和
//求最大子数组和 队员:张鹏宇 武于微 #include<iostream> #include<cmath> using namespace std; int main() { int number[200],k=0,j=1,Arr[200][2],Max; cout<<"请输入整数数组元素:"<<endl; for(;;k++) { cin>>number[k]; if(cin.get()==' ') { break; } } Arr[0][1]=number[0]; for(;j<k+1;j++) { Arr[j][0]=max(Arr[j-1][0],Arr[j-1][1]); Arr[j][1]=max(Arr[j-1][1]+number[j],number[j]); Max=max(Arr[j][0],Arr[j][1]); } cout<<"该整数数组最大的子数组和为:"<<Max<<endl; return 0; }
结对伙伴地址在这里:http://www.cnblogs.com/wuyw/