Given an array of numbers which has both positive and negative numbers, have to find the maximum sum of any of the sub-arrays of that array.
For example:
If the given input is :
5
1 2 3 -3 5
we have to see which is the sub-array that gives the maximum sum.
The possible sub-arrays and their sums are:
{1} sum=1
{1,2} sum=3
{1,2,3} sum=6
{2,3} sum=5
{1,3} sum=4
{2} sum= 2
{3} sum=3
{1,2,3,-3} sum=3
{2,3,-3} sum=2
{3,-3} sum= 0
{1,2,3,-3,5} sum=8
{2,3,-3,5} sum= 7
{3,-3,5} sum=5
{-3,5} sum=2
{5} sum=5
{-3} sum= -3
As, '8' is the largest sum, print it.
Implementation:
For example:
If the given input is :
5
1 2 3 -3 5
we have to see which is the sub-array that gives the maximum sum.
The possible sub-arrays and their sums are:
{1} sum=1
{1,2} sum=3
{1,2,3} sum=6
{2,3} sum=5
{1,3} sum=4
{2} sum= 2
{3} sum=3
{1,2,3,-3} sum=3
{2,3,-3} sum=2
{3,-3} sum= 0
{1,2,3,-3,5} sum=8
{2,3,-3,5} sum= 7
{3,-3,5} sum=5
{-3,5} sum=2
{5} sum=5
{-3} sum= -3
As, '8' is the largest sum, print it.
Implementation:
#include <stdio.h>
#include <stdlib.h>
int main(void) {
int *a,n,i,max=0,curmax=0;
/* Get the number of elements of the array */
scanf("%d",&n);
/* Dynamically allocate memory block of n integers and store the starting address
of the block in pointer 'a' */
a=(int*)malloc(sizeof(int)*n);
/* Get the elements of the array */
for(i=0;i<n;i++)
scanf("%d",(a+i));
/* Add the element one by one to curmax*/
for(i=0;i<n;i++)
{
curmax += *(a+i);
/* If curmax value is less than zero, set curmax to zero */
if(curmax < 0)
{
curmax=0;
}
/* Else get the largest among curmax and max, store the result in max */
else
{
max=curmax>max?curmax:max;
}
}
/* Print the maximum sum , which will be in variable 'max' */
printf("maximum sum is %d",max);
return 0;
}