> 文章列表 > leetcode 数组列表中的最大距离624

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

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

题目

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

示例 1:

输入:
[[1,2,3],
[4,5],
[1,2,3]]
输出: 4
解释:
一种得到答案 4 的方法是从第一个数组或者第三个数组中选择 1,同时从第二个数组中选择 5 。

注意:
每个给定数组至少会有 1 个数字。列表中至少有两个非空数组。
所有 m 个数组中的数字总数目在范围 [2, 10000] 内。
m 个数组中所有整数的范围在 [-10000, 10000] 内。

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/maximum-distance-in-arrays
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

题解思路

  • 首先将第一组的最小值设置为初始最小值,第一组最大值设置为初始最大值
  • 然后从第二组开始遍历到最后
  • 第二组的最大值减去初始最小值的值与初始最大值与第二组最小值之差比较选最大。最大的就是第一组和第二组之间最大的距离。
  • 同时更新最大值和最小值,第三组当成第二组处理,当前的最大值和最小值当成初始最大值和最小值处理,一直等到遍历完成之后,输出最大的距离。

代码

class Solution {
public:int maxDistance(vector<vector<int>>& arrays) {int maxAns = INT_MIN;int max1 = arrays[0][arrays[0].size()-1];int min1 = arrays[0][0];for(int i=1;i<arrays.size();i++){int temp = max( (arrays[i][arrays[i].size()-1] - min1),(max1 - arrays[i][0]));maxAns = max(temp,maxAns);max1 = max(max1,arrays[i][arrays[i].size()-1]);min1 = min(min1,arrays[i][0]);}return maxAns;}
};