zoukankan      html  css  js  c++  java
  • [LeetCode] 624. Maximum Distance in Arrays 数组中的最大距离

    Given m arrays, and each array is sorted in ascending order. Now you can pick up two integers from two different arrays (each array picks one) and calculate the distance. We define the distance between two integers a and b to be their absolute difference |a-b|. Your task is to find the maximum distance.

    Example 1:

    Input: 
    [[1,2,3],
     [4,5],
     [1,2,3]]
    Output: 4
    Explanation: 
    One way to reach the maximum distance 4 is to pick 1 in the first or third array and pick 5 in the second array.

    Note:

    1. Each given array will have at least 1 number. There will be at least two non-empty arrays.
    2. The total number of the integers in all the m arrays will be in the range of [2, 10000].
    3. The integers in the m arrays will be in the range of [-10000, 10000].

    给m个数组, 每个数组按升序排列。现在你可以从2个不同的数组中各取1个数字,计算他们的距离,距离是两个数值差的绝对值。任务是找出最大距离。

    注意要从不同数组中取数,那么即使某个数组的首尾差距很大,也不行。

    解法1:最大堆和最小堆。空间复杂度高。

    解法2:用min_val和max_val表示当前遍历到的数组中最小的首元素和最大的尾元素,当遍历到一个新的数组时,计算新数组尾元素和min_val绝对差以及max_val和新数组首元素的绝对差,取较大值和result比较来更新结果,最后返回result。

    Java:

    public class Solution {
        public int maxDistance(int[][] list) {
            int res = 0, min_val = list[0][0], max_val = list[0][list[0].length - 1];
            for (int i = 1; i < list.length; i++) {
                res = Math.max(res, Math.max(Math.abs(list[i][list[i].length - 1] - min_val), Math.abs(max_val - list[i][0])));
                min_val = Math.min(min_val, list[i][0]);
                max_val = Math.max(max_val, list[i][list[i].length - 1]);
            }
            return res;
        }
    }  

    Python:

    # Time:  O(n)
    # Space: O(1)
    class Solution(object):
        def maxDistance(self, arrays):
            """
            :type arrays: List[List[int]]
            :rtype: int
            """
            result, min_val, max_val = 0,  arrays[0][0], arrays[0][-1]
            for i in xrange(1, len(arrays)):
                result = max(result,  max(max_val - arrays[i][0], arrays[i][-1] - min_val))
                min_val = min(min_val, arrays[i][0])
                max_val = max(max_val, arrays[i][-1])
            return result  

    C++:

    class Solution {
    public:
        int maxDistance(vector<vector<int>>& arrays) {
            priority_queue<pair<int, int>> mx, mn;
            for (int i = 0; i < arrays.size(); ++i) {
                mn.push({-arrays[i][0], i});
                mx.push({arrays[i].back(), i});
            }
            auto a1 = mx.top(); mx.pop();
            auto b1 = mn.top(); mn.pop();
            if (a1.second != b1.second) return a1.first + b1.first;
            return max(a1.first + mn.top().first, mx.top().first + b1.first);
        }
    };
    

    C++:

    class Solution {
    public:
        int maxDistance(vector<vector<int>>& arrays) {
            int res = 0, start = arrays[0][0], end = arrays[0].back();
            for (int i = 1; i < arrays.size(); ++i) {
                res = max(res, max(abs(arrays[i].back() - start), abs(end - arrays[i][0])));
                start = min(start, arrays[i][0]);
                end = max(end, arrays[i].back());
            }
            return res;
        }
    };
    

      

      

    All LeetCode Questions List 题目汇总

  • 相关阅读:
    matlablib安装Helvetica字体
    word插入矢量图的方法
    字体对应关系
    MySQL8.0.15基于mycat读写分离(windows环境)
    2.MySQL8.0.15主从同步(windows环境)
    1.MySQL8.0.15安装步骤(windows环境)
    mysql自带的压力测试工具
    FreeFileSync + Windows任务计划程序 实现自动备份功能
    FreeFileSync 设置服务器文件自动备份,同时可做本地代码程序同步软件
    dokcer镜像添加ssh服务
  • 原文地址:https://www.cnblogs.com/lightwindy/p/9699031.html
Copyright © 2011-2022 走看看