配列は、bruteforceθ(n2)と比較して、アルゴリズムθ(nlogn)[ソーティング+最小距離の発見]を作成するために事前にソートされています。どちらのコードも同じ仕事をしますが、最初のコードは時間制限を超えています。私はエラーが何であるのだろうか。コード内のバグはありますか? forループを使用してループ(時間制限を超過)n個の数字の配列内の2つの最も近い数字の間の距離を求める。 (Presorted Arrays)
#include <stdio.h>
void mindistance(int a[],int n)
{
int i=1,arraymin=999,currentmin,current=a[0];
while(i<n)
{
if(a[i]==current)
i++;
else
{
currentmin=a[i]-a[i-1];
if(currentmin<arraymin)
{
arraymin=currentmin;
current=a[i];
i++;
}
}
}
printf("%d",arraymin);
}
int main(void)
{
int a[]={4,34,56,77,99,424,754};
mindistance(a,7);
return 0;
}
コードは(うまく動作)しながら、と
コード
#include <stdio.h>
void mindistance(int a[],int n)
{
int i,arraymin=999,currentmin,current=a[0],x,y;
for(i=1;i<n;i++)
{
if(a[i]==current)
continue;
else
{
currentmin=a[i]-a[i-1];
if(currentmin<arraymin)
{
arraymin=currentmin;
current=a[i];
}
}
}
printf("%d",arraymin);
}
int main(void)
{
int a[]={4,34,56,77,99,424,754};
mindistance(a,7);
return 0;
}
「i ++」は常に起こるはずです。したがって、whileループでは、ループの最初のものか、ループの最後のもののどちらかとしてください。 if文ではしないでください。どんなところでも、もしあなたがテストでそれをやろうとするなら、 'if(currentmin
これはうまくいった。 if-else節の後の一般的なi ++ステートメントしかし、なぜ私は別のI ++インクリメントで早く動かなかったのですか? –