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

解法:遍历找出最大值和最小值

初始代码

class Solution {
public:
    int maxDistance(vector<vector<int>>& arrays) {
        int min = 10001;
        int max = -10001;
        for(auto i : arrays)
        {
            if(i[0] < min)
            {
                min = i[0];
            }

            if(i[i.size() - 1] > max)
            {
                max = i[i.size() - 1];
            }
        }
        return max - min;
    }
};
代码逻辑
  1. 初始化min 和 max 分别被初始化为一个较大的值和一个较小的值,用于记录所有数组中的最小值和最大值。

  2. 遍历数组:对于每个数组,检查其第一个元素(最小值)和最后一个元素(最大值),并更新全局的 min 和 max

  3. 返回结果:最终返回 max - min,即最大值与最小值的差。

问题分析
  1. 未检查最小值和最大值是否来自同一个数组

    • 初始代码只记录了全局的最小值和最大值,但没有检查它们是否来自同一个数组。

    • 如果最小值和最大值来自同一个数组,那么计算结果是不符合要求的,因为题目要求最小值和最大值必须来自不同的数组。

  2. 无法处理边界情况

    • 如果所有数组的最小值和最大值都来自同一个数组,初始代码无法正确处理这种情况,导致结果错误。


修改后的代码

class Solution {
public:
    int maxDistance(vector<vector<int>>& arrays) {
        int min_val = 10001;
        int max_val = -10001;
        int min_idx = -1;
        int max_idx = -1;

        // 遍历所有数组,找到最小值和最大值以及它们所在的数组索引
        for (int i = 0; i < arrays.size(); ++i) {
            if (arrays[i][0] < min_val) {
                min_val = arrays[i][0];
                min_idx = i;
            }
            if (arrays[i][arrays[i].size() - 1] > max_val) {
                max_val = arrays[i][arrays[i].size() - 1];
                max_idx = i;
            }
        }

        // 如果最小值和最大值不在同一个数组中,直接返回它们的差值
        if (min_idx != max_idx) {
            return max_val - min_val;
        }

        // 如果最小值和最大值在同一个数组中,需要找到次小值和次大值
        int second_min_val = 10001;
        int second_max_val = -10001;

        for (int i = 0; i < arrays.size(); ++i) {
            if (i != min_idx) {
                if (arrays[i][0] < second_min_val) {
                    second_min_val = arrays[i][0];
                }
            }
            if(i != max_idx)
            {
                if (arrays[i][arrays[i].size() - 1] > second_max_val) {
                    second_max_val = arrays[i][arrays[i].size() - 1];
                }
            }
        }

        // 返回最大值与次小值的差值和次大值与最小值的差值中的较大者
        return std::max(max_val - second_min_val, second_max_val - min_val);
    }
};
代码逻辑
  1. 初始化

    • min_val 和 max_val 用于记录全局的最小值和最大值。

    • min_idx 和 max_idx 用于记录最小值和最大值所在的数组索引。

  2. 第一次遍历

    • 遍历所有数组,找到全局的最小值和最大值,并记录它们所在的数组索引。

  3. 检查是否来自同一个数组

    • 如果最小值和最大值不在同一个数组中,直接返回它们的差值。

  4. 处理最小值和最大值在同一个数组的情况

    • 如果最小值和最大值来自同一个数组,则需要找到次小值和次大值(即排除当前数组的最小值和最大值)。

    • 再次遍历数组,跳过最小值和最大值所在的数组,找到次小值和次大值。

  5. 返回结果

    • 返回 max_val - second_min_val 和 second_max_val - min_val 中的较大者,确保最小值和最大值来自不同的数组。

改进点
  1. 确保最小值和最大值来自不同数组

    • 通过记录最小值和最大值所在的数组索引,可以判断它们是否来自同一个数组。

    • 如果来自同一个数组,则通过次小值和次大值来重新计算最大距离。

  2. 处理边界情况

    • 修改后的代码能够正确处理所有数组的最小值和最大值都来自同一个数组的情况。


总结

  • 初始代码的问题

    • 未检查最小值和最大值是否来自同一个数组。

    • 无法处理所有数组的最小值和最大值都来自同一个数组的情况。

  • 修改后的代码的改进

    • 通过记录数组索引,确保最小值和最大值来自不同的数组。

    • 引入次小值和次大值的概念,处理边界情况。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/972683.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SpringAI系列 - ToolCalling篇(二) - 如何设置应用侧工具参数ToolContext(有坑)

目录 一、引言二、集成ToolContext示例步骤1: 在`@Tool`标注的工具方法中集成`ToolConext`参数步骤2:`ChatClient`运行时动态设置`ToolContext`参数三、填坑一、引言 在使用AI大模型的工具调用机制时,工具参数都是由大模型解析用户输入上下文获取的,由大模型提供参数给本地…

​实在智能与宇树科技、云深科技一同获评浙江省“人工智能服务商”、 “数智优品”​等荣誉

近日&#xff0c;浙江省经信厅正式公布《2024 年浙江省人工智能应用场景、应用标杆企业、人工智能服务商及 “数智优品” 名单》。 实在智能获评浙江省“人工智能服务商”&#xff0c;核心产品 “实在 Agent 智能体” 入选 “数智优品”。一同获此殊荣的还有宇树科技、云深处科…

【云安全】云原生-Docker(六)Docker API 未授权访问

Docker API 未授权访问 是一个非常严重的安全漏洞&#xff0c;可能导致严重的安全风险。 什么是 Docker API &#xff1f; Docker API 是 Docker 容器平台提供的一组 RESTful API&#xff0c;用于与 Docker 守护程序进行通信和管理 Docker 容器。通过 Docker API&#xff0c;…

open-webui安装

docker安装openwebui 拉取镜像 docker pull ghcr.io/open-webui/open-webui:maindocker images启动 docker run -d -p 8346:8080 --name open-webui ghcr.io/open-webui/open-webui:maindocker ps查看端口占用 lsof -i:8346访问地址 http://ip:port http://127.0.0.1:8346

在ubuntu上用Python的openpyxl模块操作Excel的案例

文章目录 安装模块读取Excel数据库取数匹配数据和更新Excel数据 在Ubuntu系统的环境下基本职能借助Python的openpyxl模块实现对Excel数据的操作。 安装模块 本次需要用到的模块需要提前安装(如果没有的话) pip3 install openpyxl pip3 install pymysql在操作前&#xff0c;需…

SOME/IP--协议英文原文讲解8

前言 SOME/IP协议越来越多的用于汽车电子行业中&#xff0c;关于协议详细完全的中文资料却没有&#xff0c;所以我将结合工作经验并对照英文原版协议做一系列的文章。基本分三大块&#xff1a; 1. SOME/IP协议讲解 2. SOME/IP-SD协议讲解 3. python/C举例调试讲解 4.2 Speci…

基于YOLO11深度学习的果园苹果检测与计数系统设计与实现【python源码+Pyqt5界面+数据集+训练代码】

《------往期经典推荐------》 一、AI应用软件开发实战专栏【链接】 项目名称项目名称1.【人脸识别与管理系统开发】2.【车牌识别与自动收费管理系统开发】3.【手势识别系统开发】4.【人脸面部活体检测系统开发】5.【图片风格快速迁移软件开发】6.【人脸表表情识别系统】7.【…

【C++】 Flow of Control

《C程序设计基础教程》——刘厚泉&#xff0c;李政伟&#xff0c;二零一三年九月版&#xff0c;学习笔记 文章目录 1、选择结构1.1、if 语句1.2、嵌套的 if 语句1.3、条件运算符 ?:1.4、switch 语句 2、循环结构2.1、while 语句2.2、do-while 语句2.3、 for 循环2.4、循环嵌套…

mysql 学习15 SQL优化,插入数据优化,主键优化,order by优化,group by 优化,limit 优化,count 优化,update 优化

插入数据优化&#xff0c; insert 优化&#xff0c; 批量插入&#xff08;一次不超过1000条&#xff09; 手动提交事务 主键顺序插入 load 从本地一次插入大批量数据&#xff0c; 登陆时 mysql --local-infile -u root -p load data local infile /root/sql1.log into table tb…

玩转大语言模型——使用LM Studio在本地部署deepseek R1的零基础)教程

系列文章目录 玩转大语言模型——使用langchain和Ollama本地部署大语言模型 玩转大语言模型——三分钟教你用langchain提示词工程获得猫娘女友 玩转大语言模型——ollama导入huggingface下载的模型 玩转大语言模型——langchain调用ollama视觉多模态语言模型 玩转大语言模型—…

【复现DeepSeek-R1之Open R1实战】系列7:GRPO原理介绍、训练流程和源码深度解析

目录 4.6 GRPO训练过程4.6.1 GRPO原理4.6.2 设置参考模型4.6.3 从训练集中抽取问题4.6.4 旧策略模型生成G个输出4.6.5 对每个输出用奖励模型 RM 打分4.6.6 根据目标函数做梯度更新 【复现DeepSeek-R1之Open R1实战】系列博文链接&#xff1a; 【复现DeepSeek-R1之Open R1实战】…

STM32物联网终端实战:从传感器到云端的低功耗设计

STM32物联网终端实战&#xff1a;从传感器到云端的低功耗设计 一、项目背景与挑战分析 1.1 物联网终端典型需求 &#xff08;示意图说明&#xff1a;传感器数据采集 → 本地处理 → 无线传输 → 云端存储&#xff09; 在工业物联网场景中&#xff0c;终端设备需满足以下核心需…

R 语言科研绘图第 26 期 --- 密度图-基础

在发表科研论文的过程中&#xff0c;科研绘图是必不可少的&#xff0c;一张好看的图形会是文章很大的加分项。 为了便于使用&#xff0c;本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中&#xff0c;获取方式&#xff1a; R 语言科研绘图模板 --- sciRplothttps://mp.…

Starlink卫星动力学系统仿真建模番外篇6-地球敏感器

地球敏感器&#xff1a;介绍、使用方法及相关算法 地球敏感器是航天器姿态控制系统中的重要传感器&#xff0c;用于确定地球相对于航天器的位置和方向。它在卫星、空间站和深空探测器等任务中广泛应用&#xff0c;主要用于姿态控制、轨道调整和导航。本文将介绍地球敏感器的基…

【含文档+PPT+源码】基于微信小程序的猎兔汽车保养维修美容服务平台的设计与实现

项目介绍 本课程演示的是一款基于微信小程序的猎兔汽车保养维修美容服务平台的设计与实现&#xff0c;主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的 Java 学习者。 1.包含&#xff1a;项目源码、项目文档、数据库脚本、软件工具等所有资料 2.带你从零开始部…

斐波那契数列模型:在动态规划的丝绸之路上追寻斐波那契的足迹(上)

文章目录 引言递归与动态规划的对比递归解法的初探动态规划的优雅与高效自顶向下的记忆化搜索自底向上的迭代法 性能分析与比较小结 引言 斐波那契数列&#xff0c;这一数列如同一条无形的丝线&#xff0c;穿越千年时光&#xff0c;悄然延续其魅力。其定义简单而优美&#xff…

基于微信小程序的宿舍报修管理系统设计与实现,SpringBoot(15500字)+Vue+毕业论文+指导搭建视频

运行环境 jdkmysqlIntelliJ IDEAmaven3微信开发者工具 项目技术SpringBoothtmlcssjsjqueryvue2uni-app 宿舍报修小程序是一个集中管理宿舍维修请求的在线平台&#xff0c;为学生、维修人员和管理员提供了一个便捷、高效的交互界面。以下是关于这些功能的简单介绍&#xff1a; …

Linux环境开发工具

Linux软件包管理器yum Linux下安装软件方式&#xff1a; 源代码安装rpm安装——Linux安装包yum安装——解决安装源、安装版本、安装依赖的问题 yum对应于Windows系统下的应用商店 使用Linux系统的人&#xff1a;大部分是职业程序员 客户端怎么知道去哪里下载软件&#xff1…

遥感影像目标检测:从CNN(Faster-RCNN)到Transformer(DETR)

我国高分辨率对地观测系统重大专项已全面启动&#xff0c;高空间、高光谱、高时间分辨率和宽地面覆盖于一体的全球天空地一体化立体对地观测网逐步形成&#xff0c;将成为保障国家安全的基础性和战略性资源。未来10年全球每天获取的观测数据将超过10PB&#xff0c;遥感大数据时…

大数据开发治理平台~DataWorks(核心功能汇总)

目录 数据集成 功能概述 使用限制 功能相关补充说明 数据开发 功能概述 数据建模 功能概述 核心技术与架构 数据分析 功能概述 数据治理 数据地图 功能概述 数据质量 功能概述 数据治理资产 功能概述 使用限制 数据服务 功能概述 数据集成 DataWorks的数据…