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 }

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

  • 相关阅读:
    select在各个浏览器中的兼容性问题
    pc打开手机站提示切换为手机屏幕
    图片预加载
    div盒子水平垂直居中的方法
    如何检测该浏览器为微信浏览器
    小箭头的写法,z-index在ie7显示混乱问题
    微信a标签不跳转
    css font简写规则
    windows环境cmd下执行jar
    docker制作镜像步骤
  • 原文地址:https://www.cnblogs.com/NeilHappy/p/2834694.html
Copyright © 2011-2022 走看看