[leetcode/lintcode 题解] 算法面试真题详解:数组中最大的差值

描述
给 m 个数组, 每一个数组均为升序. 现在你可以从两个不同的数组中挑选两个整数(每一个数组选一个)并且计算差值. 我们将两个整数 a 和 b 之间的差定义为它们的绝对差 |a - b|. 你的任务是去找到最大的差值.

每一个给出的数组长度至少为 1. 至少有两个不为空的数组
m 个数组中所有整数的个数和在 [2, 10000]范围内.
m 个数组中所有的整数均将在[-10000, 10000]范围内.

在线评测地址:领扣题库官网

样例1
输入:[[1,2,3], [4,5], [1,2,3]]
输出:4
解释:
获得最大差值的一种方式是在第一个数组或第三个数组中取 1, 在第二个数组中取 5. 
样例2
输入:[[1,2,3,4,5,6,7,8,9],[0,10]]
输出:9

解题思路
我们在遍历m个数组时,对于第i个数组,记录前i-1个数组中的最大值和最小值,此时有res=max(res,abs(ai−maximum),abs(ai−minimum))
源代码

public class Solution {

    /**
     * @param arrs: an array of arrays
     * @return: return the max distance among arrays
     */
    public int maxDiff(int[][] arrs) {
        int res = 0, start = arrs[0][0], end = arrs[0][arrs[0].length - 1];
        for (int i = 1; i < arrs.length; i++) {
            res = Math.max(res, Math.max(Math.abs(arrs[i][0] - end), Math.abs(arrs[i][arrs[i].length - 1] - start)));
            start = Math.min(start, arrs[i][0]);
            end = Math.max(end, arrs[i][arrs[i].length - 1]);
        }
        return res;
    }
}

更多题解参考:九章官网solution

上一篇:spark-TopK算法


下一篇:比较Apache Hadoop 生态系统中不同的文件格式和存储引擎的性能