两数组最短距离-------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 }
           如果你觉得我的文章对你有帮助,请赞一下,非常感谢!

本文转自NeilHappy 51CTO博客,原文链接:http://blog.51cto.com/neilhappy/1101336,如需转载请自行联系原作者
相关文章
|
6月前
|
开发者
【Leetcode -485.最大连续1的个数 -492.构造矩形】
【Leetcode -485.最大连续1的个数 -492.构造矩形】
26 0
|
14天前
|
算法 测试技术 C#
【动态规划】【数论】【区间合并】3041. 修改数组后最大化数组中的连续元素数目
【动态规划】【数论】【区间合并】3041. 修改数组后最大化数组中的连续元素数目
|
3月前
leetcode-352:将数据流变为多个不相交区间
leetcode-352:将数据流变为多个不相交区间
18 0
|
4月前
【每日一题Day234】LC1171从链表中删去总和值为零的连续节点 | 链表模拟 哈希表+前缀和
【每日一题Day234】LC1171从链表中删去总和值为零的连续节点 | 链表模拟 哈希表+前缀和
20 0
|
4月前
力扣每日一题 ---- 2906. 构造乘积矩阵
力扣每日一题 ---- 2906. 构造乘积矩阵
|
4月前
|
算法 测试技术 C#
C++二分查找算法的应用:将数据流变为多个不相交区间
C++二分查找算法的应用:将数据流变为多个不相交区间
|
8月前
|
算法
算法篇之二分查找(第74题探索二维矩阵、第287题寻找重复数)
算法篇之二分查找(第74题探索二维矩阵、第287题寻找重复数)
71 0
|
10月前
剑指offer_数组---最小的K个数
剑指offer_数组---最小的K个数
35 0
|
10月前
剑指offer_数组---把数组排成最小的数
剑指offer_数组---把数组排成最小的数
37 0
|
10月前
|
BI
剑指offer_数组---构建乘积数组
剑指offer_数组---构建乘积数组
39 0