В конкурсе они попросили написать функцию C, которая возвращает минимальное расстояние между X и Y в данном массиве, где X и Y являются элементами массива. Предоставлено X И Y ОТНОСИТЕЛЬНО.Минимальный пробел между двумя элементами в заданном массиве
Если написал кусок кода, но этот код выполняется на множество if
х и else
-х
Мой код (Есть некоторые ошибки):
int getMinXYDist(int arr[],int n,int x,int y){
int i,flag = 0,ele = -1 ,dist = 0;
int minDist = 1000; // SETTING minDist TO MAX VALUE.
for(i = 0 ; i< n; i++)
if(arr[i] == x || arr[i] == y){
if(flag == 0){
flag = 1;
ele = arr[i]==x?x:y;
dist = 0;
}
else{
if(ele == x){
if(arr[i] == y){
minDist = dist < minDist ? dist : minDist;
dist = 0;
ele = y;
}
else //if(arr[i] == x){
dist = 0;
}
else { //if(ele == y)
if(arr[i] == x){
minDist = dist < minDist ? dist : minDist;
dist = 0;
ele = x;
}
}
}
}
else {
if(flag == 1)
dist++;
}
return minDist;
}
void main(){
int arr = {6,1,5,1,8,6,3,4};
printf("\n%d" ,getMinXYDist(arr,sizeof(arr)/sizeof(int),6,5)); //Must return 2.
}
Может ли один Подсказать более разумный способ [Как и в случае O (n) временной сложности] вычисления расстояния?
могло быть отрицательным? или абсолютное значение? – gongzhitaao
@gongzhitaao не может быть отрицательным. –
@gongzhitaao, если мой массив равен 6 1 5 8 2 8 4 6, между 1 и 6 и 6 и 1 - то же самое. И расстояние равно 1. –