数组中最大子数组的和
题目:求一数组中最大子数组的和
- 设计思路:
- 输入到数组中,直到输入回车停止
- 动态规划。
- maxSum表示前 i 个数组最大子数组的值。maxSumOfArray为maxSumOfArray+Array[i] 与 Array[i]的最大值 。那么maxSum的值应为maxSum与maxSumOfArray的最大值。
- 递推式:
- maxSumOfArray=max(maxSumOfArray+Array[i],Array[i]);
- maxSum=max(maxSum,maxSumOfArray);
程序代码:
1 #include <iostream> 2 using namespace std; 3 int main() 4 { 5 int Array[100]; //定义数组 6 int length; //数组长度 7 for(length=0;;) //输入数组 遇到Enter即为输入完 8 { 9 cin>>Array[length]; 10 length++; 11 if(getchar()=='\n') 12 { 13 break; 14 } 15 } 16 int maxSumOfArray,maxSum; 17 maxSumOfArray=maxSum=Array[0]; 18 //当我们加上一个正数时,和会增加;当我们加上一个负数时,和会减少。 19 //如果当前得到的和是个负数,那么这个和在接下来的累加中应该抛弃并重新清零,不然的话这个负数将会减少接下来的和。 20 for(int i=1;i<length;i++) 21 { 22 maxSumOfArray=max(maxSumOfArray+Array[i],Array[i]); //变量maxSumOfArray 为包含Array[i] 与Array[i] 取最大 23 maxSum=max(maxSum,maxSumOfArray); ////变量maxSum 为maxSum 与 maxSumOfArray 取最大 24 } 25 cout<<"最大子数组和:"<<maxSum<<endl; 26 return 0; 27 }
运行结果:
总结:
这道题难得地方在于对这种算法的理解,明白了其中的道理,就学会了这种阶梯思路。
小伙伴博客地址:http://www.cnblogs.com/L-Damon-v/p/5317035.html