数组列表中的最大距离

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

示例 1:

输入: [[1,2,3], [4,5], [1,2,3]]
输出: 4

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

  • 算法思路
  1. 遍历数组:我们可以记录每个数组中的最小值和最大值,以及它们在数组中的位置。
  2. 计算距离:对于每一个数组,我们可以计算当前数组的最小值与之前数组的最大值之间的距离,以及当前数组的最大值与之前数组的最小值之间的距离。
  3. 更新最大距离:在遍历的过程中,不断更新最大距离。
#include <iostream>
#include<algorithm>
#include <vector>
using namespace std;


class Solution
{
public:
    int maxDistance(vector<vector<int>>& arrays)
    {
        // 获取第一个数组的最大值与最小值
        int minVal = arrays[0][0];
        int maxVal = arrays[0].back();

        // 循环遍历更新最大值与最小值
        int maxDist = 0;
        for (int i = 1; i < arrays.size(); i++)
        {
            // 计算当前最大值与之前最小值的距离并更新距离
            maxDist = max(maxDist, abs(arrays[i].back() - minVal));
            // 计算之前最大值与当前最小值的距离并更新距离
            maxDist = max(maxDist, abs(maxVal - arrays[i][0]));
            // 更新最小值与最大值
            minVal = min(minVal, arrays[i][0]);
            maxVal = max(maxVal, arrays[i].back());
        }

        return maxDist;
    }
};

int main() 
{
    Solution solution;
    vector<vector<int>> arrays = { {1, 2, 3}, {4, 5}, {1, 2, 3} };
    cout << "最大距离是: " << solution.maxDistance(arrays) << endl;
    return 0;
}

题目来源:LeetCode

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值