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

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

给定 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 <= 10^5
  • 1 <= arrays[i].length <= 500
  • -10^4 <= arrays[i][j] <= 10^4
  • arrays[i] 以 升序 排序。
  • 所有数组中最多有 10^5 个整数。

分析:由于数组已经按照升序排好序了,所以每一行的最大最小值分别处于这一行的末尾和开头。从第一行开始遍历整个数组,用maxn和mini记录全局的最大最小值。从第二行开始,每次进入新的一行时,分别计算当前行的最大值减去mini和maxn减去当前行的最小值,此时得到的较大值是一个可能的答案,并且不会因为最大值或最小值在同一行而不符合要求。将这个可能的答案与之前得到的答案相对比,保留较大值。遍历完整个数组即可得到答案。

int maxDistance(int** arrays, int arraysSize, int* arraysColSize) {
    int mini=arrays[0][0],maxn=arrays[0][arraysColSize[0]-1],ans=-1;
    for(int i=1;i<arraysSize;++i)
    {
        ans=fmax(ans,fmax(fabs(arrays[i][0]-maxn),fabs(arrays[i][arraysColSize[i]-1]-mini)));
        maxn=fmax(maxn,arrays[i][arraysColSize[i]-1]),mini=fmin(arrays[i][0],mini);
    }
    return ans;
}


http://www.kler.cn/a/580452.html

相关文章:

  • 大语言模型学习--向量数据库基础知识
  • Vue3中动态Ref的魔法:绑定与妙用
  • 【开发语音助手】android 语音识别、合成、唤醒 sherpa
  • Android Dagger2 原理深度剖析
  • STM32步进电机驱动全解析(上) | 零基础入门STM32第五十七步
  • C语言每日一练——day_2(快速上手C语言)
  • 安卓逆向环境搭建(Windows/Linux双平台)
  • 【2025】Electron 基础一 (目录及主进程解析)
  • Visual Studio Code 基本使用指南
  • linux docker相关指令
  • QT系列教程(18) MVC结构之QItemSelectionModel模型介绍
  • JAVA面试_进阶部分_深入理解socket网络异常
  • Pytorch实现之SICSGAN实现图像识别
  • 什么是Jmeter? Jmeter工作原理是什么?
  • 【计算机原理】深入解析 HTTP 中的 URL 格式、结构和 URL encode 转义与 URL decode 逆转义原理
  • 【javaEE】多线程(进阶)
  • 蓝桥杯2024年第十五届省赛真题-团建
  • wordpress两个网站用同一个数据库的实现方法
  • 学习笔记:利用OpenAI实现阅卷智能体
  • Android 低功率蓝牙之BluetoothGattCallback回调方法详解