• 两数组最短距离2012年12月26日


           刚才那题太简单,不过瘾,再做一道题。

           问题描述:已知两个元素从小到大排列的数组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 }

              如果你觉得我的文章对你有帮助,请推荐一下,非常感谢!

  • 相关阅读:
    2017面向对象程序设计寒假作业2!
    寒假学习计划
    2017面向对象程序设计寒假作业1!
    bzoj3583 杰杰的女性朋友
    poj1185 [NOI2001炮兵阵地]
    bzoj1009 [HNOI2008]GT考试
    EXKMP
    bzoj1355 [Baltic2009]Radio Transmission
    poj1275 Cashier Employment
    bzoj3809 Gty的二逼妹子序列
  • 原文地址:https://www.cnblogs.com/NeilHappy/p/2834694.html
Copyright © 2020-2023  润新知