本地计算机上的c代码很好,但算法预热练习中的hackerrank出现运行时错误”;愤怒的孩子;?

本地计算机上的c代码很好,但算法预热练习中的hackerrank出现运行时错误”;愤怒的孩子;?,c,C,我在hackerrank的算法部分用c语言上传了“愤怒的孩子”问题的代码。对于testcase#2,它显示运行时错误,而在我的本地机器(Ubuntu14.04,x86)的gcc中,它给出了答案1335,根据他们给出的testcase#2输出,这是正确的ans。请告诉我如何使hackerrank完美地接受我的代码—它适用于所有其他测试用例 #include<stdio.h> #include<assert.h> long long int *insertion(long l

我在hackerrank的算法部分用c语言上传了“愤怒的孩子”问题的代码。对于testcase#2,它显示运行时错误,而在我的本地机器(Ubuntu14.04,x86)的gcc中,它给出了答案1335,根据他们给出的testcase#2输出,这是正确的ans。请告诉我如何使hackerrank完美地接受我的代码—它适用于所有其他测试用例

#include<stdio.h>
#include<assert.h>
long long int *insertion(long long int ar[],long long int n)
{
    long long int i,j,v;
    for(i=2;i<=n;i++)
    {
        v=ar[i];j=i;
        while(ar[j-1]>v){
            ar[j]=ar[j-1];j--;
            }
            ar[j]=v;
            }return ar;
}
int main()
{
long long int i,a,b,c,temp;
long long int n,k;
scanf("%lld",&n);
long long int ar[n+1];
assert(1<=n<=100000);
scanf("%lld",&k);
assert(1<=k<=n);
for(i=1;i<=n;i++)
{
    scanf("%lld",&ar[i]);
    assert(0<= ar[i] <=1000000000);
    }
insertion(ar,n);
//for(i=1;i<=n;i++)
//{
//  printf("%lld\n",ar[i]);}
long long int f,min=9999999999;
for(i=1;i<=n-k+1;i++)
{
f=ar[i+k-1]-ar[i];
if(f<min)
    min=f;
}
printf("%lld\n",min);
return 0;   
}
#包括
#包括
长整型*插入(长整型ar[],长整型n)
{
长整型i,j,v;
对于(i=2;iv){
ar[j]=ar[j-1];j--;
}
ar[j]=v;
}返回ar;
}
int main()
{
长-长int i、a、b、c、temp;
长整型n,k;
scanf(“%lld”、&n);
长整数[n+1];

assert(1插入排序函数中有一个错误,它不会检查
j
是否小于1。因此,每当代码试图在列表的开头插入值时,它就很容易陷入混乱

解决方法很简单,只要改变就行了

        while(ar[j-1]>v){


或者,与其重新发明轮子,不如使用
stdlib
中提供的一个库函数,例如
qsort()
。效率更高,出错率更低。您必须调整代码以使用基于零的索引,但是。

v=ar[i];j=i;而(ar[j-1]>v){ar[j]=ar[j-1];j--;}
为什么不使用for循环?
        while(j>1 && ar[j-1]>v){