> 文档中心 > 【力扣题解】面试题 16.06. 最小差

【力扣题解】面试题 16.06. 最小差


😊博主目前也在学习,有错误欢迎指正😊
🌈保持热爱 奔赴星海🌈

文章目录

    • 一、题目
      • 1、题目描述
      • 2、基础框架
      • 3、原题链接
    • 二、解题报告
      • 1、思路分析
      • 2、代码详解
    • 三、本题知识

一、题目

1、题目描述

给定两个整数数组a和b,计算具有最小差绝对值的一对数值(每个数组中取一个值),并返回该对数值的差

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;    }}

三、本题知识

双指针