题目:返回一个整数数组中最大子数组
要求:输入一个整形数组,数组里有整数也有负数;
数组中连续的一个或多个整数组成一个整数组每个子数组都有一个和;
求所有子数组的和的最大值,要求时间复杂度为O(n)。
思路:设数组为a[10],从第一个数啊a[1]开始,设置两个变量,一个记录和,一个记录最大值,如果和大于最大值,则替换,如果和为负数,则舍弃,从下一个数字起重新计算和
……….以此类推,最后结束的最大值即为所求
具体实现代码:
1 #include<iostream> 2 using namespace std; 3 int main() 4 { 5 int arr[10],result,sum=0,k=0; 6 cout<<"请输入10个数值:"<<endl; 7 for(int i=0;i<10;i++) 8 { 9 cin>>arr[i]; 10 } 11 result=arr[0]; 12 for(int j=0;j<10;j++) 13 { 14 if(sum>=0){ 15 sum+=arr[j]; 16 } 17 else{ 18 sum=arr[j]; 19 } 20 if(result<sum) 21 result=sum; 22 } 23 cout<<"最大数组之和:"<<result<<endl; 24 return 0; 25 }
运行截图:
结对体会:
这次和我结对的是信1201-2班的曹坤,程序思路是共同探讨的结果,他写程序,我进行测试,通过这次的结对活动,体会到了团队合作的重要。两人合作,效率更高,还能避免的错误
合影: