栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

JAVA练习212-最小差

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

JAVA练习212-最小差

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

示例:
输入:{1, 3, 15, 11, 2}, {23, 127, 235, 19, 8}
输出:3,即数值对(11, 8)

提示:

1 <= a.length, b.length <= 100000-2147483648 <= a[i], b[i] <= 2147483647正确结果在区间 [0, 2147483647] 内 分析: 方法:排序+双指针

由于两个数组都是乱序的,我们可以将它们先进行排序再进行操作。关于两个有序数组,如一个数组的值比另一个数组大,那么该数组的下一个元素一定比另一个数组的更大,要想达到最小值,我们只需要对最小值的索引加1即可,直到遍历完成。

时间复杂度:O(n*log n)         排序的时间复杂度为 O(n*log n),双制针遍历为 O(n)
空间复杂度:O(n*log n)  

class Solution {
    public int smallestDifference(int[] a, int[] b) {
        //对a,b进行排序
        Arrays.sort(a);
        Arrays.sort(b);
        //定义双指针,结果,临时差绝对值
        int i = 0, j = 0, ans = 2147483647, temp;
        //遍历
        while(i < a.length && j < b.length){
            //差绝对值
            temp = Math.abs(a[i] - b[j]);
            //更新最小值
            if(temp >= 0 && temp < ans){
                ans = temp;
            }
            //小的值索引加1
            if(a[i] < b[j]){
                i++;
            }
            else{
                j++;
            }
        }
        return ans;
    }
}

题目来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/smallest-difference-lcci

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/763989.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号