[英]Segmentation fault in test cases
因此,問題如下:給定任意整數數組(合理地大),返回數組中任意兩個元素之間的最大差,以使較大的元素比較小的元素出現在更高的索引處。 如果找不到這樣的對,則返回-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個可能的測試用例中,只有3個可以運行。 其余案例返回分段錯誤。 任何想法都會有所幫助。
如評論中所述,您已經聲明A
僅容納20個整數。 但是問題最多可以發送1,000,000個整數。 那是錯誤!
使用指針使其變得更加重要。 首先A
聲明為整數指針,然后讀取數組的第一個元素,使用該整數可以為數組A
動態分配內存( malloc()
或calloc()
函數)。 因此A
的大小會動態變化,您可以根據第一個元素的功能對其進行調整。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.