【发布时间】:2013-04-10 19:41:27
【问题描述】:
在一次比赛中,他们要求编写一个 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 如果我的数组是 6 1 5 8 2 8 4 6,dist 在 1 和 6 之间,并且 6 和 1 相同。距离为 1。
-
你不是说你的数字必须是不同的吗?
-
试图理解问题:
abs( indexOf( X ) - indexOf( Y ) ),其中indexOf()是一个简单的线性搜索函数,能否提供正确的答案?
标签: c arrays optimization distance