返回一个整数数组中最大子数组的和(环)
1 #include<iostream> 2 #include<string> 3 #include<ctime> 5 #define N 5 6 using namespace std; 7 8 int MaxSum(int *arr, int size) 9 { 10 int i, sum, max1, max2, dp,min; 11 dp = max1 = arr[0]; 12 for (i = 1; i < size; ++i)//非环形数组;++i,先i自加1,再使用i的值 13 { 14 if (dp < 0) 15 dp = arr[i]; 16 else 17 dp += arr[i]; 18 if (dp > max1) 19 max1 = dp; 20 } 21 sum = min = dp = arr[0]; 22 for (i = 1; i < size; ++i)//求数组最小子数组和,再用数组全部元素和减去,则结果跨过arr[n-1]到arr[0] 23 { 24 if (dp>0) 25 dp = arr[i]; 26 else 27 dp += arr[i]; 28 if (dp < min) 29 min = dp; 30 sum += arr[i]; 31 } 32 max2 = sum - min;//数组全部元素和减去最小子数组 33 return max1>max2 ? max1 : max2;//三目运算符;如果max1>max2,将max1的值返回,否则返回max2 34 } 35 int main() 36 { 37 int arr[N]; 38 srand(time(0)); 39 cout << "随机数组为:" << endl; 40 for (int j = 0; j < N ; j++) 41 { 42 arr[j] = rand() % 20 - 10; 43 cout << arr[j] << " "; 44 } 45 cout << endl; 46 cout << "最大子数组的和为:" << MaxSum(arr, N) << endl; 47 return 0; 48 }
总结:这个思路下的求解相当简单,但没有找到返回最大子数组的方法。通过此次做题,感觉思路至关重要,有一个完整的思路,剩下的就是对其实现。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。