【最值次值】624. 数组列表中的最大距离

news/2024/10/18 10:16:25/

文章目录

  • 一、题目
    • 1、题目描述
    • 2、基础框架
    • 3、原题链接
  • 二、解题报告
    • 1、思路分析
    • 2、时间复杂度
    • 3、代码详解
  • 三、本题小知识

一、题目

1、题目描述

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

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

2、基础框架

  • C++版本给出的基础框架如下:

3、原题链接

二、解题报告

1、思路分析

   ( 1 ) (1) (1)分别提取出所有数组的最小值和最大值得到小数组a和大数组b。
   ( 2 ) (2) (2)在小数组a中找出最小值和次小值,以及最小值出现的次数和最小值下标。
   ( 3 ) (3) (3)在大数组b中找出最大值和次大值,以及最大值出现的次数和最大值下标。
   ( 4 ) (4) (4)如果最小值或者最大值不止一次,或者最小值下标与最大值下标不相同,直接返回最大值减最小值。
   ( 5 ) (5) (5)否则返回最大值减次小值与次大值减最小值之间的最大值。

2、时间复杂度

时间复杂度O(n)

3、代码详解

class Solution {
public:int maxDistance(vector<vector<int>>& arrays) {vector<int> a;vector<int> b;for (int i = 0; i < arrays.size(); i++) {if(arrays[i].size() != 0) {a.push_back(arrays[i][0]);b.push_back(arrays[i][arrays[i].size()-1]);}}int m1 = -10001;int m1index = -1;int m2 = -10001;int l1 = 10001;int l1index = -1;int l2 = 10001;int m1cnt = 1;int l1cnt = 1;for (int i = 0; i < a.size(); i++) {if (a[i] < l1) {// l1不是第一次更新,则之前的最小值为当前次小值if (l1 != 10001) {l2 = l1;}l1index = i;l1 = a[i];// 最小值更新,最小值出现的次数也要刷新l1cnt = 1;} else if (a[i] == l1) {// 记录最小值出现次数l1cnt++;} else {// 如果当前值不是最小值,则判断当前值是否值次小值l2 = min(l2, a[i]);}if (b[i] > m1) {// m1不是第一次更新,则之前的最大值为当前次大值if (m1 != -10001) {m2 = m1;}m1index = i;m1 = b[i];m1cnt = 1;} else if (b[i] == m1) {m1cnt++;} else {// 如果当前值不是最大值,则判断当前值是否值次大值m2 = max(m2, b[i]);}}if (l1cnt > 1 || m1cnt > 1 || l1index != m1index) {return m1 - l1;} else {return max(m1-l2, m2-l1);}}
};

三、本题小知识


http://www.ppmy.cn/news/129019.html

相关文章

用vue-full-calendar实现酒店预定管理展示

文章目录 前言一、关于vue-full-calendar二、使用步骤1. 引入库2. 使用库3. 开始编码4. 实际效果图展示5. 点击弹窗展示6. 弹窗展示效果图 总结 前言 近些天有位做酒店业务朋友问到我&#xff0c;有没有前端比较好用的预定日历查看插件&#xff0c;实际上我也没有研究过&#…

伪彩色图像(RGB彩色空间)

%f为一幅焊缝图像 f imread(hanfeng.tif); g ice(image,f); 第一幅图像为变化前&#xff1b;第二幅为变化后的图像。 图&#xff08;一&#xff09; 图&#xff08;二&#xff09;

什么是伪彩色

什么是伪彩色 伪彩色(pseudo-color)图像的每个像素值实际上是一个索引值或代码&#xff0c;该代码值作为色彩查找表CLUT(Color Look-Up Table)中某一项的入口地址&#xff0c;根据该地址可查找出包含实际R、G、B的强度值。 这种用查找映射的方法产生的色彩称为伪彩色。用这种方…

HP LaserJet Pro CP1525n 彩色打印机使用随机光盘安装驱动程序的方法

在安装打印机驱动程序前&#xff0c;不要连接打印机 USB 连接线。 运行打印机驱动程序&#xff1a; 下载驱动 安装&#xff0c;打开下载的驱动&#xff0c;双击 在“请查看以下协议。”窗口中&#xff0c;勾选“我已查看并接受安装协议。”项&#xff0c;然后点击“下一步”…

理光UV打印机彩色压不出墨的问题

问题&#xff1a;一台理光UV打印机彩色压不出墨&#xff0c;二级墨盒墨水倒流空气瓶。 检查&#xff1a;发现负压表被调乱&#xff0c;按彩色压墨开关时&#xff0c;检查各部件工作正常&#xff08;花了大量时间&#xff09;&#xff0c;但压不出墨&#xff0c;白色压墨正常。 …

epson彩色打印机加墨水_epson彩色喷墨打印机只打印黑色,彩色墨盒不用,怎么实现?...

爱普生彩色喷墨打印机单色打印的设计小技巧 用过爱普生彩色喷墨打印机的用户可能都会遇到这么一种情况&#xff1a;由于其彩色喷墨系列打印机的黑色墨与彩色墨为两个相互之间完全独立的墨盒&#xff0c;其中任何一个墨盒无墨时&#xff0c; 或者之一有问题&#xff0c;坏掉什么…

富士施乐S2110显示J-4请更换感光鼓后无法进行HFSI计数器初始化的另类操作

故障现象: 开机后显示错误J-4,按键盘无任何反应; 按 “全部清除”键或“停止”键显示下图内容: 故障解决: 更换全新原装感光鼓(硒鼓、鼓组件)、正巧又提示墨粉量低,于是又更换全新原装粉筒,更换完成后重新开机依然提示J-4,那么就剩下HFSI计数器初始化的问题了,我…

真彩色、假彩色和伪彩色的区别

伪彩色图像 同灰度图像一样,也是单波段的图像&#xff0c;但是这个单波段图像是有颜色的&#xff0c;不再是灰度图那样的&#xff0c;而是它的每一个灰度值都对应颜色空间中的某一种颜色。它可以是彩色的图像&#xff0c;但是需要时刻谨记的是该图像只是单通道的。我个人理解伪…