【发布时间】:2016-01-26 09:33:17
【问题描述】:
所以,问题如下: 给定任何整数数组(相当大),返回数组中任意两个元素之间的最大差异,使得较大的元素出现在比较小元素更高的索引处。如果没有找到这样的对,则返回 -1。 示例:
7 2 3 10 2 4 8 1
其中第一个元素是数组的大小(或输入的行数),其余元素是元素。 以上样本输出为 8(10-2)。
我的代码如下:
int A[20],size;
scanf("%d",&size);
for(int i=0;i<size;i++){
scanf("%d\n",&A[i]);
}
int diff = A[1]-A[0];
int currsum = diff;
int maxsum = currsum;
for(int i=1; i<size-1; i++)
{
// Calculate current difference for the loop
diff = A[i+1]-A[i];
// Calculate current sum for the loop
if (currsum > 0)
currsum += diff;
else
currsum = diff;
// Update max sum(if needed)
if (currsum > maxsum)
maxsum = currsum;
}
printf("%d",maxsum);
这是来自 Hackerrank 的一个问题,但它仅适用于 10 个可能的测试用例中的三个。其余情况返回分段错误。任何想法都会有所帮助。
【问题讨论】:
-
size的最大限制是 20? -
最大大小为 1,000,000。元素的最大大小为 1,000,000,最小为 -1,000,000。
-
所以你有一个只能包含 20 个整数的数组,而你的程序最多可以接收 百万 个整数?
-
那你为什么声明
A的大小为20?我的最佳猜测是,其余 7 个测试用例的大小超过 20。 -
哦。认为我也应该阅读约束。我的错。热烈感谢@JoachimPileborg。
标签: c arrays segmentation-fault