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

  • 相关阅读:
    Element ui TimePicker 开始时间不得小于结束时间
    Vue 使用print.js实现前端打印功能
    vue中props的默认写法
    Element Cascader 级联选择器 选择第一级 label标题选择 内容过多
    vue 定时器 不断切换组件 定时器越来越快的问题
    Vue 全局组件传递参数
    echarts渐变发光半圆仪表盘
    左侧折叠菜单在sessionStorage中保存左侧菜单的激活状态
    Vue 封装网络工具类
    .browserslistrc 配置兼容浏览器
  • 原文地址:https://www.cnblogs.com/lightwindy/p/9699031.html
Copyright © 2011-2022 走看看