题目要求:输入一个整型数组,数组里有正数也有负数
数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和
求所有子数组的和的最大值,要求时间复杂度为O(n)
设计思想
求出所有连续子数组的和,然后进行比较。用array[0]来作为max的初始值.数组里有正数有负数,当与负数相加,如果和小于等于0,最大值等于未加负数之前的和,与正数相加则等于加正数之后的和。
源代码
1 #include<iostream> 2 using namespace std; 3 4 int main() 5 { 6 int i,n,sum=0; 7 int array[1000]; 8 cout<<"请输入数组的长度:"<<endl; 9 cin>>n; 10 int max=array[0]; 11 cout<<"请输入数组内的数"<<endl; 12 for(i=0;i<n;i++) 13 { 14 cin>>array[i]; 15 } 16 for(i=0;i<n;i++) 17 { 18 if(sum<=0) 19 { 20 sum=array[i]; 21 } 22 else 23 { 24 sum=sum+array[i]; 25 } 26 if(sum>max) 27 { 28 max=sum; 29 } 30 } 31 cout<<"子数组和的最大值为"<<max<<endl; 32 return 0; 33 }
结果截图:
总结
编程要善于思考,有了思路再去写,免得一直处于写了再改的模式,重在分析