链表写法:
#pragma warning(disable:4996)
#include <stdio.h>
#include <stdlib.h>
typedef struct Node *List;
struct Node
{
int number;
List next;
};
List Create(int number);
int main()
{
int inputnumber,max,max_1;
List L,temp;
scanf("%d",&inputnumber);
L=Create(inputnumber);
max = 0;
max_1 = 0;
for (int i = 0; i < inputnumber; i++)
{
temp = L;
max_1 += temp->number;
temp = temp->next;
if (max_1 < 0)
{
max_1 = 0;
}
else
{
if (max_1 > max)
{
max = max_1;
}
}
L = L->next;
}
printf("%d",max);
return 0;
}
List Create(int number)
{
List L,t,cycle;
int i,data;
L = (List)malloc(sizeof(struct Node));
L->next = NULL;
t = L;
i = 0;
for (i=0;i<number;i++)
{
List temp;
temp = (List)malloc(sizeof(struct Node));
scanf("%d",&data);
temp->number = data;
t->next = temp;
t = temp;
}
t->next = NULL;
cycle = L;
L = L->next;
free(cycle);
return L;
}
数组写法:
//算法 4 ,T(N)=O(N)(代码源自于官方mooc)
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n; //数组元素个数
scanf("%d",&n);
int i=0;
int number[n];
for(i=0;i<n;i++)
{
scanf("%d",&number[i]);
}
int sum;
sum=0;
int result;
result=0;
for(i=0;i<n;i++)
{
if(sum+number[i]<0)
{
sum=0;
}
else
{
sum+=number[i];
}
if(result<sum)
{
result=sum;
}
}
printf("%d",result);
return 0;
}
题目源于中国mooc。