1

配列は、ブルートフォース θ(n2) と比較して、アルゴリズム θ(nlogn) [ソート + 最小距離の検索] を作成して事前にソートされます。両方のコードは同じ仕事をしますが、最初のコードは制限時間を超えていることを示しています。エラーは何だろうと思います。コードにバグはありますか?

while ループを含むコード (制限時間超過)


#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;
}

for ループを使用するコード (うまく機能します)


#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;
}
4

2 に答える 2

1

ループは同一ではありません。for ループでは反復ごとに i が増加しますが、while ループでは i が増加する場合があります。同じ while ループは次のようになります。

while(i<n)
{
    if(a[i]==current)
        i++;
    else
    {
        currentmin=a[i]-a[i-1];
        if(currentmin<arraymin)
        {
            arraymin=currentmin;
            current=a[i];
        }
        i++;
    }
}
于 2016-03-26T19:47:20.580 に答える