zoukankan      html  css  js  c++  java
  • 两数组最短距离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 }

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

  • 相关阅读:
    Python 集合
    Python sorted()
    CodeForces 508C Anya and Ghosts
    CodeForces 496B Secret Combination
    CodeForces 483B Friends and Presents
    CodeForces 490C Hacking Cypher
    CodeForces 483C Diverse Permutation
    CodeForces 478C Table Decorations
    CodeForces 454C Little Pony and Expected Maximum
    CodeForces 313C Ilya and Matrix
  • 原文地址:https://www.cnblogs.com/NeilHappy/p/2834694.html
Copyright © 2011-2022 走看看