数组 最大差值_【每日算法Day 97】经典面试题:求两个数组最小差
题目链接
LeetCode 面试题 16.06. 最小差[1]
题目描述
给定两个整数数组 a
和 b
,计算具有最小差绝对值的一对数值(每个数组中取一个值),并返回该对数值的差。
说明:
1 <= a.length, b.length <= 100000
-2147483648 <= a[i], b[i] <= 2147483647
- 正确结果在区间
[-2147483648, 2147483647]
内
示例1
输入:{1, 3, 15, 11, 2}, {23, 127, 235, 19, 8}输出:3,即数值对(11, 8)
题解
首先最暴力的方法就是 暴力枚举两个数组中的所有数对,然后计算绝对值最小的差值,这样显然是会超时的。
所以我们先分别对两个数组从小到大进行排序,然后用双指针的方法来计算。
- 初始的时候 分别指着两个数组的第一个元素。
- 然后计算 的绝对值,如果比当前最小值还要小,就更新最小值。
- 然后判断 和 的大小关系。如果 ,那么如果增大 ,差值只会越来越大,所以只能增大 。同理如果 ,那就增大 。
- 最后如果其中一个数组遍历完了就结束遍历。
是不是有点类似归并排序的合并数组过程?但是这里有个区别,最后遍历完之后,一定会有某个数组还没遍历完。而那些没遍历的数字其实都大于另一个数组中最大的数,所以没有必要再和另一个数组最大值做差值了。这样差值只会越来越大,没有意义。
最终的时间复杂度就是 。
代码
c++
class Solution {public: int smallestDifference(vector<int>& a, vector<int>& b) { sort(a.begin(), a.end()); sort(b.begin(), b.end()); int n = a.size(), m = b.size(); int i = 0, j = 0; long res = INT_MAX; while (i < n && j < m) { res = min(res, abs(long(a[i])-long(b[j]))); if (a[i] > b[j]) ++j; else ++i; } return res; }};
python
class Solution: def smallestDifference(self, a: List[int], b: List[int]) -> int: a.sort() b.sort() n, m = len(a), len(b) i, j, res = 0, 0, 2147483647 while i < n and j < m: res = min(res, abs(a[i]-b[j])) if a[i] > b[j]: j += 1 else: i += 1 return res
参考资料
[1]
LeetCode 面试题 16.06. 最小差: https://leetcode-cn.com/problems/smallest-difference-lcci/
作者简介:godweiyang,知乎同名,华东师范大学计算机系硕士在读,方向自然语言处理与深度学习。喜欢与人分享技术与知识,期待与你的进一步交流~
我的微信:weiyang792321264。有任何问题都可以在评论区留言,也欢迎加我微信深入沟通~
数组 最大差值_【每日算法Day 97】经典面试题:求两个数组最小差相关推荐
- 数组 最大差值_数组两元素的最大差:从暴力到多线程
参考leetcode第121题,大值需要出现在小值之后.这道题可以用其他更简单的方法解决,但是下面解法中用到的动态规划思想可以去解比如说最大连续子数组这种问题. 初始化 初始化一个长度为10^4的数组 ...
- 算法--06年华为面试:求两个数组的最小差值(Java实现)
Q题目 华为06年面试题(要求8分钟完成) 有两个数组a,b,大小都为n,数组元素的值任意,无序: 要求:通过交换a,b中的元素,使数组a元素的和与数组b元素的和之间的差最小. A解法 1.常见错误逻 ...
- 如何表示数组所有数都不等于一个数_每日算法系列【LeetCode 523】连续的子数组和...
题目描述 给定一个包含非负数的数组和一个目标整数 k,编写一个函数来判断该数组是否含有连续的子数组,其大小至少为 2,总和为 k 的倍数,即总和为 n*k,其中 n 也是一个整数. 示例1 输入: [ ...
- 实现输入10个数,输出这10个数的和,平均值;输出该组数中数与数的最大差值;再输入一个数,然后确定它在这个数组中第一次出现的位置,如果没有该数则输出-1,否则输出其下标
实现输入10个数,输出这10个数的和,平均值:输出该组数中数与数的最大差值:再输入一个数,然后确定它在这个数组中第一次出现的位置,如果没有该数则输出-1,否则输出其下标 int main() //程序 ...
- 最快速度求两个数组之交集算法与hash
一个题目 该题目来自58同城的二面,用最快速度求两个数组之交集算法. 比如A={6,2,4,1},B={2,9,4,3},那么A&B={2,4}. 算法一:在大多数情况,也就是一般的情况下,大 ...
- 两个有序数组A、B,长度分别为m、n,找到两个数组的第k个值并返回
/*************************************************************************** **description:两个有序数组A.B ...
- 最快速度求两个数组之交集算法
该题目来自58同城的二面,用最快速度求两个数组之交集算法. 比如A={6,2,4,1},B={2,9,4,3},那么A&B={2,4}. 算法一:在大多数情况,也就是一般的情况下,大家都能想出 ...
- 求两个数组的交集和并集
晚上闲来无事,想起前两天查资料时候,看到别人一篇博客标题关于数组的交集和并集,晚上也随便写写,权当督促自己坚持经常练习练习写写小Demo.如下,先来一段求有序数组的交集的代码,代码如下: public ...
- Java求两个数组的交集、差集、并集
目录 Java求两个数组的并集,代码如下: Java求两个数组的交集,代码如下: Java求两个数组的差集,代码如下: 交集.差集.并集测试代码如下: Java求两个数组的并集,代码如下: /*** ...
最新文章
- 【恋爱通告】高清完整版迅雷下载! 首发
- 中兴高调秀Axon 10 Pro 5G版20倍变焦样张:号称媲美万元广角镜头
- [FFmpeg] 在 ffplay 源码中嵌入 YOLO 算法实现实时物体检测
- 简单小巧的跨平台共享内存代码
- 清华大学操作系统OS学习(七)——进程控制
- php redis 里面的hscan 第四个参数count很不靠谱
- 西威变频器avo下载调试资料_步骤详解|西门子PLCS7-1200通过周期性通讯PZD通道时组态和下载...
- HTML+CSS导航栏及下拉菜单的实现
- Python学习历程-1-20180630
- RuntimeError: CUDA error: device-side assert triggered
- 微信如何用软件测试是否被拉黑,怎么知道微信里对方把自己拉黑或删除了?微信被好友拉黑检测方法...
- Unexpected error while running MyBatis Generator. Cannot resolve classpath entry: mysql-connector-ja
- 揭晓计算机的神秘面纱——计算机是如何工作的(一)
- sql server08 (mssqlserver)启动不了或者无法登陆三大解决办法
- 教育一对一直播软件开发的优势是什么?
- 新生儿上户口之异地办理
- Android打包APK后禁止通过DMMS的Logcat查看程序输出的调试信息
- linux 2.6.30 内核编译 提示 ‘make[1]: *** [arch/x86/vdso/vdso.so.dbg] Error 1’ 错误
- Spring5(下)
- 含有一般疑问句的歌_第三章:疑问句
热门文章
- 编译 Apache Karaf 2.2.9遇到找不到jar包问题的解决方案
- 【100题】第三十三 高级字符匹配(和谐系统原理)
- 操作 Wave 文件(13): waveOutGetVolume、waveOutSetVolume
- Cisco交换机链路聚合
- 发送接收图片_国际空间站将在8月4-5号发送SSTV图片,普通对讲机可接收
- devops工程师_DevOps工程师的认证
- 为什么要在WebAssembly中使用Rust?
- 程序员口头禅_今年系统管理员的口头禅:更聪明地工作,而不是更努力
- onenote组织知识体系_我们的家人教给我们有关组织生活的知识
- 每天都有所收获_使技术保持最新状态会有所收获