当前位置: 首页 > news >正文

LeetCode 0624.数组列表中的最大距离:只关心最小最大值

【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 个整数。

 

解题方法:只关心最小最大值

对于两个数组,抽象的画一画,大约一共有以下三种可能:(若有两端点相等也不影响结果)

  1. 不重合

    ---- 
           -----
    
  2. 重合不包含

    -------
        -------
    
  3. 包含

    --------
      ----
    

分别从两个数组中取一个元素,想让差值的绝对值最大,怎么取?很容易发现一定要从数组边界取值(要么取数组的最大值,要么取最小值,否则最大/小值与另一个数组的差值可以更大)。

也就是说:

我们只需要维护数组最大值和最小值,并且保证两个值不会取自同一个数组不就行了么。

  • 时间复杂度 O ( l e n ( a r r a y s ) ) O(len(arrays)) O(len(arrays))
  • 空间复杂度 O ( 1 ) O(1) O(1)

AC代码

C++
/*
 * @Author: LetMeFly
 * @Date: 2025-02-19 17:37:04
 * @LastEditors: LetMeFly.xyz
 * @LastEditTime: 2025-02-19 17:46:16
 */
/*
---- 
       -----


-------
    -------


--------
 ----
*/
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
'''
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
/*
 * @Author: LetMeFly
 * @Date: 2025-02-19 17:47:53
 * @LastEditors: LetMeFly.xyz
 * @LastEditTime: 2025-02-19 17:51:18
 */
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
/*
 * @Author: LetMeFly
 * @Date: 2025-02-19 17:47:56
 * @LastEditors: LetMeFly.xyz
 * @LastEditTime: 2025-02-19 17:53:37
 */
package main

func 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.数组列表中的最大距离/

相关文章:

  • el-table 结合 slot 具名插槽遍历封装列表模板
  • jenkins自动发版vue前端笔记
  • JSON格式,C语言自己实现,以及直接调用库函数(一)
  • HTTP、HTTPS区别可靠性及POST为什么比GET安全的探讨
  • 结构风荷载理论与Matlab计算
  • Linux后台启动命令nohup并且MobaXterm后台启动断网也不关闭软件
  • 《探秘DeepSeek优化器:解锁模型训练的高效密码》
  • nodejs及搭建
  • 零基础用AI—AI伦理风险防控的十大核心策略与全球协同治理实践
  • 文章学习---经颅聚焦超声刺激(TUS)对灵长类动物大脑皮层激活的影响
  • SOME/IP--协议英文原文讲解6
  • Centos7 使用 yum 报错 Could not retrieve mirrorlist
  • Nmap:网络扫描与安全评估的多功能工具
  • leetcode4:寻找两个正序数组的中位数
  • 双非一本电子信息专业自学嵌入式,学完 Linux 后咋走?单片机 FreeRTOS 要补吗?
  • Elasticsearch7.6.2 安装过程
  • 论文笔记:How Much Can Time-related Features Enhance Time Series Forecasting?
  • python-leetcode 35.二叉树的中序遍历
  • 代码随想录算法训练营Day51
  • 【Go语言快速上手】第二部分:Go语言进阶之并发编程
  • 体坛联播|曼联一只脚迈进欧联杯决赛,赵心童4比4奥沙利文
  • 短剧迷|《权宠》一出,《名不虚传》
  • 解放日报:浦东夯实“热带雨林”式科创生态
  • 证监会副主席王建军被查
  • 奔驰一季度利润降四成,受美国加征关税影响放弃全年盈利展望
  • 聚焦各领域顶尖工匠,《上海工匠》第十季于五一播出