Я должен найти максимальный неотрицательный подмассив, т. Е. Сумма элементов подмассива, содержащего только неотрицательные термины, должна быть максимальной. Если сумма 2 подмассивов максимальна, то сумма с максимальным массивомдлина должна быть напечатана. Если длина двух подмассивов одинакова, то следует выбрать подмассив с более низким начальным индексом.
Я передаю входной массив функции. Затем запускаю цикл.Сначала внутри этого цикла я гарантирую, что отрицательные члены, которые могут появиться в начале массива, не учитываются. Затем найдите сумму подмассива, содержащего неотрицательные члены, и найдите максимальную сумму.
void largestsubarr(int* A,int n1,int* len1){
int i=0,j,k=0,count;
A=(int*)malloc(sizeof(int)*n1);
len1=(int*)malloc(sizeof(int)*n1);
int subarr[n1][n1];
int largest=0,max_cnt=0;
while(i<n1){
int sum=0;
count=0;
while(A[i]<0)
i++;
//The first non negative term
while(A[i]>=0)
{
count++;
sum+=A[i];
i++;
}
if(sum>largest)
largest=sum;
}
printf("The largest subarray sum : %d",largest);
free(len1);
}
int main()
{
int n;
printf("Enter the no. of elements : ");
scanf("%d",&n);
int* a=(int*)malloc(sizeof(int)*n);
int* res=(int*)malloc(sizeof(int)*n);
printf("Enter the elements of the array :\n");
for(int i=0;i<n;i++)
scanf("%d",&a[i]);
printf("Address of a : %p",a);
largestsubarr(a,n,res);
free(a);
free(res);
return 0;
}
I am getting segmentation fault.Try to resolve it using gdb.Following is the output I get:
Program received signal SIGSEGV, Segmentation fault.
0x0000555555554a54 in largestsubarr (A=0x555500000000, n1=0,
len1=0x0)
at q2.c:24
24 sum+=A[i];