最大连续子数组和
1. 题目描述
例如输入的数组为1, -2, 3, 10, -4, 7, 2, -5,和最大的子数组为3, 10, -4, 7, 2, 因此输出为该子数组的和18。
2. 解法一:三层搜索
#include<iostream> using namespace std; int MaxSubSum(int *a, int num) { int curSum=0; int maxSum=a[0]; for(int i=0; i<num; i++) { for(int j=i; j<num; j++) { for(int k=i; k<=j; k++) { curSum+=a[k]; } if(curSum>maxSum) maxSum=curSum; curSum=0; } } return maxSum; } int main() { int a[8]={1, -2, 3, 10, -4, 7, 2, -5}; int num=8; int maxSum=MaxSubSum(a, num); cout<<maxSum<<endl; return 0; }
3. 解法二:前顾后盼法
如果currSum加上当前元素a[j]后不小于a[j],则令currSum加上a[j],否则currSum重新赋值,置为下一个元素,即currSum = a[j]。
同时,当currSum > maxSum,则更新maxSum = currSum,否则保持原值,不更新。
#include<iostream> using namespace std; int MaxSubSum(int *a, int num) { int curSum=0; int maxSum=a[0]; for(int i=0; i<num; i++) { curSum=(curSum+a[i]>a[i]) ? curSum+a[i] : a[i]; maxSum=maxSum>curSum ? maxSum : curSum; } return maxSum; } int main() { int a[8]={1, -2, 3, 10, -4, 7, 2, -5}; int num=8; int maxSum=MaxSubSum(a, num); cout<<maxSum<<endl; return 0; }
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。