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 题目汇总

  • 相关阅读:
    MySQL的sql_mode合理设置
    Redis
    启动Jupyter Notebook提示ImportError: DLL load failed: 找不到指定的模块。
    Linux目录结构
    修改mysql密码报错: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '
    springmvc运行原理
    博客园美化
    数据搜索
    git
    window
  • 原文地址:https://www.cnblogs.com/lightwindy/p/9699031.html
Copyright © 2011-2022 走看看