陣列被預先排序,使得算法θ(nlogn)[排序+找到最小距離],與強力θ(n2)相比。這兩個代碼都執行相同的工作,但第一個顯示超出了時間限制。我不知道錯誤是什麼。代碼中的任何錯誤?查找n個數字的數組中最接近的兩個數字之間的距離。 (Presorted Arrays)
代碼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;
}
代碼
#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 ++增量工作? –