【力扣题解】面试题 16.06. 最小差
😊博主目前也在学习,有错误欢迎指正😊
🌈保持热爱 奔赴星海🌈
文章目录
-
- 一、题目
-
- 1、题目描述
- 2、基础框架
- 3、原题链接
- 二、解题报告
-
- 1、思路分析
- 2、代码详解
- 三、本题知识
一、题目
1、题目描述
2、基础框架
- Java版本框架代码如下:
class Solution { public int smallestDifference(int[] a, int[] b) { }}
3、原题链接
面试题 16.06. 最小差
二、解题报告
1、思路分析
(1)对两个数组排序,定义两个指针i和j,分别指向a,b数组的第一个元素。
(2)遍历两个数组,若a[i]和b[j]相等,直接返回零,若a[i] > b[j],记录最小值,j++。若a[i] < b[j],记录最小值,i++。
(3)需要注意的一点是,未防止溢出,我们记录最小值时用long类型。
2、代码详解
class Solution { public int smallestDifference(int[] a, int[] b) { Arrays.sort(a); Arrays.sort(b); int i = 0; int j = 0; long res = Long.MAX_VALUE; while(i < a.length && j < b.length) { if(a[i] == b[j]) { return 0; } if(a[i] > b[j]) { res = Math.min(res,(long)a[i] - (long)b[j]); j++; }else { res = Math.min(res,(long)b[j] - (long)a[i]); i++; } } return (int)res; }}
三、本题知识
双指针