Sie erhalten ein Array von N Integer-Zahlen.
Die maximale Summe des Arrays ist die maximale Summe der Elemente eines nicht leeren aufeinander folgenden Subarrays dieses Arrays.
Zum Beispiel ist die maximale Summe des Arrays [1, -2, 3, -2, 5] 6, weil die Summe des Subarrays [3, -2, 5] 6 ist und es unmöglich ist, ein größeres Subarray zu erreichen Summe.
Jetzt dürfen Sie nicht mehr als ein Element aus dem angegebenen Array entfernen. Was ist die maximal mögliche maximale Summe der resultierenden Anordnung, die Sie dadurch erreichen können?Maximale Summe in einem Subarray
Ich teste meinen Code mit meinen eigenen Testfällen. Ich bekomme korrekte Ausgabe auf dev-C++. Aber wenn ich meinen Code online teste, bekomme ich falsche Antwort. Ich bin nicht in der Lage herauszufinden, was das Problem ist.
#include <stdio.h>
#include <limits.h>
#include <stdlib.h>
struct result{
long long int start;
long long int end;
long long int sum;
}res;
long long int find_max(long long int a[],long long int n)
{
long long int max=LLONG_MIN;
long long int i;
for(i=0;i<n;++i)
{
if(a[i]>max)
max=a[i];
}
return max;
}
long long int max_sub(long long int a[],long long int n)
{
long long int i;
long long int min,sum1=0;
struct result max,max_curr,*maxsub;
maxsub=calloc(sizeof(res),n);
max.sum=LLONG_MIN;
max_curr=max;
for(i=0;i<n;++i)
{
if(max_curr.sum<0)
{
max_curr.sum=a[i];
max_curr.start=i;
max_curr.end=i;
}
else
{
max_curr.sum+=a[i];
max_curr.end=i;
}
if(max_curr.sum>max.sum)
{
max=max_curr;
}
maxsub[i]=max;
}
min=0;
for(i=maxsub[n-1].start;i<=maxsub[n-1].end;++i)
{
if(a[i]<0)
{
if(min==0 || a[i]<min)
min=a[i];
}
}
sum1=maxsub[n-1].sum-min;
return sum1;
}
int main()
{
int t;
scanf("%d",&t);
while(t--){
long long int n,i;
scanf("%lld",&n);
long long int a[n];
for(i=0;i<n;++i)
scanf("%lld",&a[i]);
long long int sum=0;
sum=find_max(a,n);
if(sum<=0)
{
printf("%lld\n",sum);
}
else
{
sum=max_sub(a,n);
printf("%lld\n",sum);
}
}
return 0;
}
Meinen Sie ‚ein Element entfernen‘, indem sie leer zu machen, oder Sie auch die Array-Größe schrumpfen durch das Element zu entfernen? – user3078414
schrumpfen Sie die Größe des Arrays durch Entfernen dieses Elements – user150025
Hier ist ein Array mit der Größe 6: [1, 2, 3, -1, 5, 1]. Wenn ich dein Programm starte, bekomme ich das Ergebnis 12. Aber es scheint mir, das Ergebnis sollte 11 sein? –