【力扣题解】面试题 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;
    }
}

三、本题知识

双指针

你可能感兴趣的:(力扣题解,leetcode,算法,java)