刚才那题太简单,不过瘾,再做一道题。
问题描述:已知两个元素从小到大排列的数组x[]与y[],请编写一个程序算出两个数组元素彼此之间差的绝对值中最小的一个数,此值称作数组的距离。
我的思路:关键点依然是"两个数组都从小到大排序"。那么,当x[i]==y[j]时,数组间距离为0,这肯定是最小的;当x[i]-y[j]>0时,如果i再增大,那么x[i]也会增大,那么x[i]-y[j]也会增大,而这样的增大不是我们的目标,所以此时要将j加1;同理,如果x[i]-y[j]<0,如果j再增大,那么x[i]-y[j]的绝对值也会增大。代码如下:
1 #include <stdio.h> 2 #include <math.h> 3 4 int main() 5 { 6 int x[]={1,2,5,7,9}; 7 int y[]={2,6,8}; 8 int len_x=sizeof(x)/sizeof(int); 9 int len_y=sizeof(y)/sizeof(int); 10 int i,j; 11 int min=abs(x[0]-y[0]); 12 for(i=0,j=0;i<len_x && j<len_y;) 13 { 14 if(x[i]-y[j]==0) 15 { 16 min=0; 17 break; 18 } 19 else if(x[i]-y[j]<0) 20 { 21 int temp=y[j]-x[i]; 22 if(min>temp) 23 min=temp; 24 i++; 25 } 26 else if(x[i]-y[j]>0) 27 { 28 int temp=x[i]-y[j]; 29 if(min>temp) 30 min=temp; 31 j++; 32 } 33 } 34 printf("min:%d\n",min); 35 return 0; 36 }
如果你觉得我的文章对你有帮助,请推荐一下,非常感谢!