/***********dynamic algorithm to get the max sum of the continous elements of a integer array**/
#include<stdio.h>
#include<iostream>
using namespace std;
/**********
sum[i] = max{sum[i-1] + a[i], a[i]}
start[i] = start[i-1]; //if sum[i-1] + a[i] > a[i]
start[i] = i; //if sum[i-1] + a[i] < a[i]
***************/
int sum[100]; //the sum
int start[100]; //the start index
void max_sum(int a[], int n)
{
sum[0] = a[0];
start[0] = 0;
int i;
for (i = 1; i < n; i++)
{
if (sum[i-1] + a[i] > a[i])
{
sum[i] = sum[i-1] + a[i];
start[i] = start[i-1];
}
else
{
sum[i] = a[i];
start[i] = i;
}
}
int maxValueIndex = 0;
for (i = 1; i < n; i++)
{
if (sum[maxValueIndex] < sum[i])
maxValueIndex = i;
}
cout<<"max value:"<< sum[maxValueIndex]<<endl;
cout<<"max value interval: "<< start[maxValueIndex] <<"---"<<maxValueIndex<<endl;
}
int main(int argc, char * argv[])
{
int a[] = {-4, 3, 56, -15, 34, 0, -14, 4};
int n = sizeof(a)/sizeof(int);
max_sum(a, n);
return 1;
}
若是求连续元素的乘积最大
- double func(double *a,const int n)
- {
- double *maxA = new double[n];
- double *minA = new double[n];
- maxA[0] = minA[0] =a[0];
- double value = maxA[0];
- for(int i = 1 ; i < n ; ++i)
- {
- maxA[i] = max(max(a[i],maxA[i-1]*a[i]),minA[i-1]*a[i]);
- minA[i] = min(min(a[i],maxA[i-1]*a[i]),minA[i-1]*a[i]);
- value=max(value,maxA[i]);
- }
- return value;
- }