【LetMeFly】624.数组列表中的最大距离:只关心最小最大值 力扣题目链接:https://leetcode.cn/problems/maximum-distance-in-arrays/
给定 m 个数组,每个数组都已经按照升序排好序了。
现在你需要从两个不同的数组中选择两个整数(每个数组选一个)并且计算它们的距离。两个整数 a 和 b 之间的距离定义为它们差的绝对值 |a-b| 。
返回最大距离。
示例 1:
输入: [[1,2,3],[4,5],[1,2,3]]
输出: 4
解释:
一种得到答案 4 的方法是从第一个数组或者第三个数组中选择 1,同时从第二个数组中选择 5 。
示例 2:
输入: arrays = [[1],[1]]
输出: 0
提示:
m == arrays.length
2 <= m <= 105
1 <= arrays[i].length <= 500
-104 <= arrays[i][j] <= 104
arrays[i] 以 升序 排序。
所有数组中最多有 105 个整数。
解题方法:只关心最小最大值 很不错的一道题。
对于两个数组,抽象的画一画,大约一共有以下三种可能:(若有两端点相等也不影响结果)
不重合
重合不包含
包含
分别从两个数组中取一个元素,想让差值的绝对值最大,怎么取?很容易发现一定要从数组边界取 值(要么取数组的最大值,要么取最小值,否则最大/小值与另一个数组的差值可以更大)。
也就是说:
我们只需要维护数组最大值和最小值,并且保证两个值不会取自同一个数组不就行了么。
时间复杂度$O(len(arrays))$
空间复杂度$O(1)$
AC代码 C++ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 class Solution {public : int maxDistance (vector<vector<int >>& arrays) { int ans = 0 ; int mLeft = 100000 , MRight = -100000 ; for (vector<int >& a : arrays) { ans = max (ans, max (a.back () - mLeft, MRight - a[0 ])); mLeft = min (mLeft, a[0 ]), MRight = max (MRight, a.back ()); } return ans; } };
Python 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ''' Author: LetMeFly Date: 2025-02-19 17:47:16 LastEditors: LetMeFly.xyz LastEditTime: 2025-02-19 17:49:04 ''' from typing import List class Solution : def maxDistance (self, arrays: List [List [int ]] ) -> int : ans = 0 m, M = 100000 , -100000 for a in arrays: ans = max (ans, M - a[0 ], a[-1 ] - m) m, M = min (m, a[0 ]), max (M, a[-1 ]) return ans
Java 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 import java.util.List;class Solution { public int maxDistance (List<List<Integer>> arrays) { int ans = 0 ; int m = 100000 , M = -100000 ; for (List<Integer> a : arrays) { ans = Math.max(ans, Math.max(a.get(a.size() - 1 ) - m, M - a.get(0 ))); m = Math.min(m, a.get(0 )); M = Math.max(M, a.get(a.size() - 1 )); } return ans; } }
Go 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 package mainfunc maxDistance (arrays [][]int ) (ans int ) { m, M := 100000 , -100000 for _, a := range arrays { ans = max(ans, max(a[len (a) - 1 ] - m, M - a[0 ])) m, M = min(m, a[0 ]), max(M, a[len (a) - 1 ]) } return }
同步发文于CSDN 和我的个人博客 ,原创不易,转载经作者同意后请附上原文链接 哦~
千篇源码题解已开源
Tisfy:https://blog.letmefly.xyz/2025/02/19/LeetCode 0624.数组列表中的最大距离/