leetcode-624.数组列表中的最大距离

数组列表中的最大距离

给定 m 个数组,每个数组都已经按照升序排好序了。现在你需要从两个不同的数组中选择两个整数(每个数组选一个)并且计算它们的距离。两个整数 a 和 b 之间的距离定义为它们差的绝对值 |a-b| 。你的任务就是去找到最大距离

目标

题意中的绝对值 |a-b|等价于选取两个数组的最大、最小值相减;由于每个数组已经排序,进一步等价于\(\max(vec[i][n-1] - vec[j][0], vec[j][m-1] - vec[i][0])\)

直观想法

\(\min(vec[i][0])\)\(\max(vec[i][n-1])\),但是还需要保障这两个数不在同一个数组中,由此产生思路:

  1. 依照 vec[i][0] 的值从小到大进行排序(不直接排序原数组,而是新申请 index 数组进行排序),得到 \(index_1\)
  2. 依照 vec[i][n-1] 的值从大到小进行排序 (不直接排序原数组,而是新申请 index 数组进行排序),得到 \(index_2\)
  3. 比较两个 index 数组的第一个值是否相等,不相等则说明不是同一个数组,可直接计算得出结果;相等则还需要拿出两个index数组的第二个值进行计算比较得出结果

最优解思路

1. 仅仅两个数组a, b

很好解决——选择 \(a_{max} - b_{min}\)\(b_{max} - a_{min}\) 的最大值

2. 三个数组 a, b, c

通过步骤1,可以得到一个潜在结果 ans;对于 c 的加入,选择 $ \max(a_{max}, b_{max}) - c_{min}$ 和 $c_{max} - \min(a_{min}, b_{min}) $ 的最大值

3. 进一步范化

已知 m-1 个数组的答案,而且知道真个数组的最大、最小值,先加入一个新的数组,计算得到答案。由此可以得到时间复杂度为\(O(n)\),空间复杂度为\(O(1)\)的方法

posted @ 2024-06-02 19:53  TopWay2Die  阅读(50)  评论(0)    收藏  举报