博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
387. 最小差
阅读量:6478 次
发布时间:2019-06-23

本文共 1403 字,大约阅读时间需要 4 分钟。

给定两个整数数组(第一个是数组 A,第二个是数组 B),在数组 A 中取 A[i],数组 B 中取 B[j],A[i] 和 B[j]两者的差越小越好(|A[i] - B[j]|)。返回最小差。

 

样例

给定数组 A = [3,4,6,7], B = [2,3,8,9],返回 0

 

时间复杂度 O(n log n)

 

没有说明原数组是有序的,我们可以先给两个数组排个序,nLogn

最简单的数组不重叠的情况两种,先排除

重叠的话,遍历A,卡住每个A[i]作为target去B[]里面找最接近的,可以使用二分法

1 int smallestDifference(vector
&A, vector
&B) { 2 // write your code here 3 if(A.size()<=0 || B.size()<=0){ 4 return 0; 5 } 6 sort(A.begin(), A.end()); 7 sort(B.begin(), B.end()); 8 9 if(A[A.size()-1] <= B[0]){10 return abs(B[0]-A[A.size()-1]);11 }12 else if(B[B.size()-1] <= A[0]){13 return abs(A[0]-B[B.size()-1]);14 }15 else{16 int result=INT_MAX;17 int low, mid, high;18 for(int i=0;i
B[mid]){27 low=mid+1;28 }29 else if(A[i]
0) {35 result = min(result, abs(A[i] - B[mid - 1]));36 }37 if (mid < B.size() - 1) {38 result = min(result, abs(A[i] - B[mid + 1]));39 }40 }41 return result;42 }43 44 }

注意二分法mid不可能取到数组的第一个或者最后一个,所以需要额外代码判断下。

转载于:https://www.cnblogs.com/TheLaughingMan/p/8157128.html

你可能感兴趣的文章
Windows平台分布式架构实践 - 负载均衡
查看>>
iOS自定制tabbar与系统的tabbar冲突,造成第一次点击各个item图片更换选中,第二次选中部分item图片不改变...
查看>>
SVN服务器使用(二)
查看>>
反射获取内部类以及调用内部类方法
查看>>
App里面如何正确显示用户头像
查看>>
U-BOOT之一:BootLoader 的概念与功能
查看>>
我的路上
查看>>
Velocity处理多余空白和多余空白行问题
查看>>
DB2与oracle有什么区别
查看>>
创建一个多级文件目录
查看>>
Picasa生成图片幻灯片页面图文教程
查看>>
svn status 显示 ~xx
查看>>
常用HiveQL总结
查看>>
[转]使用Visual Studio Code开发Asp.Net Core WebApi学习笔记(三)-- Logger
查看>>
POJ 3311 Hie with the Pie(状压DP + Floyd)
查看>>
Security updates and resources
查看>>
DNS为什么通常都会设置为14.114.114.114
查看>>
Sqoop架构(四)
查看>>
golang copy函数
查看>>
《你有多少问题要请示》精华集粹
查看>>