【发布时间】:2014-12-15 13:21:41
【问题描述】:
对于 HackerRank 挑战 The Maximum Subarray,我们也应该为负数实现 K_Dane 算法。
下面是我的 C 实现,我试图弄清楚如何调试它,但没有成功,谁能帮我找出代码中的错误?
#include <stdio.h>
int main(void)
{
long long int t, n;
scanf("%lld", &t);
while(t--)
{
scanf("%lld", &n);
long long int numbers[n], i;
for(i = 0;i < n;i++)
{
scanf("%lld", &numbers[i]);
}
long long int contigoussum = numbers[0],crtsum = numbers[0], sum = numbers[0];
for(i = 1;i < n;i++)
{
if(numbers[i] + sum > sum)
{
sum += numbers[i];
}
crtsum += numbers[i];
if(crtsum > contigoussum)
{
contigoussum = crtsum;
}
else
crtsum = 0;
}
printf("%lld %lld\n", contigoussum, sum);
}
return 0;
}
虽然,我不知道代码无法运行的所有测试用例,但这是我想出的一个:
输入
1
6
2 -1 2 3 4 -5
输出
7 11
真正的答案:我想它是10 11,因为最大连续总和可能是[2 -1 2 3 4]。
【问题讨论】:
-
哪里错了?为您的问题添加输入、预期输出和计算输出。您是否尝试过使用调试器跟踪一个小示例?
-
嗯,我真的不知道... HackerRank 并没有告诉我哪些测试用例是错误的,以及测试用例是什么... @MrSmith42
-
所以您的代码通过了您用于测试的所有示例?
-
@MrSmith42 我添加了一个测试用例,但我的代码无法正常工作...
标签: c algorithm dynamic-programming