LeetCode题练习与总结:两个列表的最小索引总和--599

一、题目描述

假设 Andy 和 Doris 想在晚餐时选择一家餐厅,并且他们都有一个表示最喜爱餐厅的列表,每个餐厅的名字用字符串表示。

你需要帮助他们用最少的索引和找出他们共同喜爱的餐厅。 如果答案不止一个,则输出所有答案并且不考虑顺序。 你可以假设答案总是存在。

示例 1:

输入: list1 = ["Shogun", "Tapioca Express", "Burger King", "KFC"],list2 = ["Piatti", "The Grill at Torrey Pines", "Hungry Hunter Steakhouse", "Shogun"]
输出: ["Shogun"]
解释: 他们唯一共同喜爱的餐厅是“Shogun”。

示例 2:

输入:list1 = ["Shogun", "Tapioca Express", "Burger King", "KFC"],list2 = ["KFC", "Shogun", "Burger King"]
输出: ["Shogun"]
解释: 他们共同喜爱且具有最小索引和的餐厅是“Shogun”,它有最小的索引和1(0+1)。

提示:

  • 1 <= list1.length, list2.length <= 1000
  • 1 <= list1[i].length, list2[i].length <= 30 
  • list1[i] 和 list2[i] 由空格 ' ' 和英文字母组成。
  • list1 的所有字符串都是 唯一 的。
  • list2 中的所有字符串都是 唯一 的。

二、解题思路

  1. 首先,我们需要一个数据结构来存储每个餐厅名字及其在两个列表中的索引。这里我们可以使用一个哈希表(HashMap)。

  2. 遍历第一个列表list1,将每个餐厅的名字和它的索引存入哈希表中。

  3. 接着,遍历第二个列表list2,对于每个餐厅名字,检查它是否在哈希表中存在,如果存在,则计算索引和(该餐厅在list1中的索引加上在list2中的索引)。

  4. 我们需要找到最小的索引和,因此我们可以维护一个变量来记录当前的最小索引和,并在遍历过程中更新它。

  5. 如果找到一个更小的索引和,我们就更新结果列表;如果找到一个与当前最小索引和相同的索引和,则将该餐厅添加到结果列表中。

  6. 最后,返回结果列表。

三、具体代码

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;public class Solution {public String[] findRestaurant(String[] list1, String[] list2) {// 使用HashMap存储list1中餐厅的名字和对应的索引Map<String, Integer> indexMap = new HashMap<>();for (int i = 0; i < list1.length; i++) {indexMap.put(list1[i], i);}// 初始化最小索引和为最大可能值int minSum = Integer.MAX_VALUE;// 使用List来存储结果List<String> result = new ArrayList<>();// 遍历list2for (int i = 0; i < list2.length; i++) {if (indexMap.containsKey(list2[i])) {int sum = i + indexMap.get(list2[i]); // 计算索引和// 如果找到更小的索引和,则更新结果列表和最小索引和if (sum < minSum) {result.clear();result.add(list2[i]);minSum = sum;} else if (sum == minSum) { // 如果索引和相同,则添加到结果列表result.add(list2[i]);}}}// 将结果列表转换为数组并返回return result.toArray(new String[0]);}
}

四、时间复杂度和空间复杂度

1. 时间复杂度
  • 第一个for循环遍历list1数组,其长度为n(假设list1的长度为n),这个循环的时间复杂度是O(n)。

  • 第二个for循环遍历list2数组,其长度为m(假设list2的长度为m),这个循环的时间复杂度是O(m)。

  • 在第二个循环中,我们调用了containsKey方法,这是一个常数时间操作,其时间复杂度是O(1)。

  • addclear方法在ArrayList中的时间复杂度都是O(1)。

综上所述,总的时间复杂度是O(n + m),因为两个循环是独立的,我们只需将它们的时间复杂度相加。

2. 空间复杂度
  • indexMap是一个哈希表,用于存储list1中所有餐厅名字及其索引。在最坏的情况下,如果list1中的每个元素都是唯一的,那么indexMap将包含n个条目。因此,空间复杂度是O(n)。

  • result是一个列表,用于存储共同喜爱的餐厅。在最坏的情况下,如果list1list2完全相同,那么result将包含所有n个餐厅。因此,空间复杂度是O(n)。

综上所述,总的空间复杂度是O(n),因为indexMapresult是独立的数据结构,且indexMap占据了主要的存储空间。

五、总结知识点

  • 类定义

    • public class Solution:定义了一个公共类Solution
  • 方法定义

    • public String[] findRestaurant(String[] list1, String[] list2):定义了一个公共方法findRestaurant,它接受两个字符串数组作为参数,并返回一个字符串数组。
  • 数据结构

    • HashMap<String, Integer>:使用哈希表来存储键值对,其中键是字符串(餐厅名字),值是整数(索引)。
    • ArrayList<String>:使用动态数组来存储结果列表。
  • 循环

    • for循环:用于遍历数组。
  • 哈希表操作

    • put:将键值对存入哈希表。
    • containsKey:检查哈希表中是否包含指定的键。
    • get:根据键获取哈希表中的值。
  • 数组与列表转换

    • toArray:将列表转换为数组。
  • 条件语句

    • if:用于条件判断。
    • else if:用于处理多个条件分支。
  • 变量操作

    • 变量赋值:例如minSum = sum;
    • 变量比较:例如if (sum < minSum)
  • 常量

    • Integer.MAX_VALUE:Java中定义的整型最大值常量。
  • 集合操作

    • clear:清空列表中的所有元素。
    • add:向列表中添加元素。
  • 返回值

    • return:用于从方法中返回值。

以上就是解决这个问题的详细步骤,希望能够为各位提供启发和帮助。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PyDeequ库在AWS EMR启动集群中数据质量检查功能的配置方法和实现代码

PyDeequ是一个基于Apache Spark的Python API&#xff0c;专门用于定义和执行“数据单元测试”&#xff0c;从而在大规模数据集中测量数据质量。 PyDeequ框架在PySpark代码中提供了全面的数据质量检查功能&#xff0c;能够帮助用户&有效地监控和提升大规模数据集的数据质量。…

React第二十八章(css modules)

css modules 什么是 css modules 因为 React 没有Vue的Scoped&#xff0c;但是React又是SPA(单页面应用)&#xff0c;所以需要一种方式来解决css的样式冲突问题&#xff0c;也就是把每个组件的样式做成单独的作用域&#xff0c;实现样式隔离&#xff0c;而css modules就是一种…

开源智慧园区管理系统如何重塑企业管理模式与运营效率

内容概要 在如今快速发展的商业环境中&#xff0c;企业面临着日益复杂的管理挑战。开源智慧园区管理系统应运而生&#xff0c;旨在通过技术创新来应对这些挑战。它不仅是一个简单的软件工具&#xff0c;而是一个全面整合大数据、物联网和智能化功能的综合平台&#xff0c;为企…

Pandas进行MongoDB数据库CRUD

在数据处理的领域,MongoDB作为一款NoSQL数据库,以其灵活的文档存储结构和高扩展性广泛应用于大规模数据处理场景。Pandas作为Python的核心数据处理库,能够高效处理结构化数据。在MongoDB中,数据以JSON格式存储,这与Pandas的DataFrame结构可以很方便地互相转换。通过这篇教…

vue3中el-input无法获得焦点的问题

文章目录 现象两次nextTick()加setTimeout()解决结论 现象 el-input被外层div包裹了&#xff0c;设置autofocus不起作用&#xff1a; <el-dialog v-model"visible" :title"title" :append-to-bodytrue width"50%"><el-form v-model&q…

stm32教程:EXTI外部中断应用

早上好啊大佬们&#xff0c;上一期我们讲了EXTI外部中断的原理以及基础代码的书写&#xff0c;这一期就来尝试一下用它来写一些有实际效能的工程吧。 这一期里&#xff0c;我用两个案例代码来让大家感受一下外部中断的作用和使用价值。 旋转编码器计数 整体思路讲解 这里&…

DeepSeek大模型技术深度解析:揭开Transformer架构的神秘面纱

摘要 DeepSeek大模型由北京深度求索人工智能基础技术研究有限公司开发&#xff0c;基于Transformer架构&#xff0c;具备卓越的自然语言理解和生成能力。该模型能够高效处理智能对话、文本生成和语义理解等复杂任务&#xff0c;标志着人工智能在自然语言处理领域的重大进展。 关…

Ubuntu 系统,如何使用双Titan V跑AI

要在Ubuntu系统中使用双NVIDIA Titan V GPU来运行人工智能任务&#xff0c;你需要确保几个关键组件正确安装和配置。以下是基本步骤&#xff1a; 安装Ubuntu操作系统&#xff1a; 下载最新版本的Ubuntu服务器或桌面版ISO文件。使用工具如Rufus&#xff08;Windows&#xff09;或…

ROS2---基础操作

工作空间(workspace) workspace是一个存放项目开发相关文件的文件夹。例如我们要开发一个机器人&#xff0c;我们可以创建一个工作空间&#xff0c;然后存放这个机器人不同功能的包&#xff08;感知&#xff08;雷达&#xff0c;相机等&#xff09;&#xff0c;运动&#xff0…

护眼好帮手:Windows显示器调节工具

在长时间使用电脑的过程中&#xff0c;显示器的亮度和色温对眼睛的舒适度有着重要影响。传统的显示器调节方式不仅操作繁琐&#xff0c;而且在低亮度下容易导致色彩失真。因此&#xff0c;今天我想为大家介绍一款适用于Windows系统的护眼工具&#xff0c;它可以帮助你轻松调节显…

Mysql进阶学习

目录 一.Mysql服务器内部架构(了解) 二.Mysql引擎 2.1 innodb引擎 2.2 myisam引擎 三.索引 3.1索引分类 3.2mysql索引数据结构 3.3聚簇索引和非聚簇索引 3.4回表查询 3.5索引下推 四.事务 数据库事务特征 事务隔离性&#xff0c;隔离级别 事务实现原理 五.锁 ①…

解锁维特比算法:探寻复杂系统的最优解密码

引言 在复杂的技术世界中&#xff0c;维特比算法以其独特的魅力和广泛的应用&#xff0c;成为通信、自然语言处理、生物信息学等领域的关键技术。今天&#xff0c;让我们一同深入探索维特比算法的奥秘。 一、维特比算法的诞生背景 维特比算法由安德鲁・维特比在 1967 年提出…

使用 postman 测试思源笔记接口

思源笔记 API 权鉴 官方文档-中文&#xff1a;https://github.com/siyuan-note/siyuan/blob/master/API_zh_CN.md 权鉴相关介绍截图&#xff1a; 对应的xxx&#xff0c;在软件中查看 如上图&#xff1a;在每次发送 API 请求时&#xff0c;需要在 Header 中添加 以下键值对&a…

doris:导入时实现数据转换

Doris 在数据导入时提供了强大的数据转换能力&#xff0c;可以简化部分数据处理流程&#xff0c;减少对额外 ETL 工具的依赖。主要支持以下四种转换方式&#xff1a; 列映射&#xff1a;将源数据列映射到目标表的不同列。 列变换&#xff1a;使用函数和表达式对源数据进行实时…

Bash 基础与进阶实践指南

目录 Bash 简介与基础基本命令与文件操作权限管理与用户管理重定向与管道变量与环境变量通配符与正则表达式Shell 脚本结构与控制流常用内建命令与技巧文本处理常用命令作业控制与进程管理别名与函数实用技巧与注意事项更多 Bash 进阶话题参考资源 1. Bash 简介与基础 1.1 什…

sizeof和strlen的对比与一些杂记

1.sizeof和strlen的对比 1.1sizeof &#xff08;1&#xff09;sizeof是一种操作符 &#xff08;2&#xff09;sizeof计算的是类型或变量所占空间的大小&#xff0c;单位是字节 注意事项&#xff1a; &#xff08;1&#xff09;sizeof 返回的值类型是 size_t&#xff0c;这是一…

实测数据处理(Wk算法处理)——SAR成像算法系列(十二)

系列文章目录 《SAR学习笔记-SAR成像算法系列&#xff08;一&#xff09;》 《wk算法-SAR成像算法系列&#xff08;五&#xff09;》 文章目录 前言 一、算法流程 1.1、回波信号生成 2.2 Stolt插值 2.3 距离脉冲压缩 2.4 方位脉冲压缩 2.5 SAR成像 二、仿真实验 2.1、仿真参数…

FFmpeg rtmp推流直播

文章目录 rtmp协议RTMP协议组成RTMP的握手过程RTMP流的创建RTMP消息格式Chunking(Message 分块) rtmp服务器搭建Nginx服务器配置Nginx服务器 librtmp库编译推流 rtmp协议 RTMP&#xff08;Real Time Messaging Protocol&#xff09;是由Adobe公司基于Flash Player播放器对应的…

鸿蒙开发在onPageShow中数据加载不完整的问题分析与解决

API Version 12 1、onPageShow()作什么的 首先说明下几个前端接口的区别&#xff1a; ArkUI-X的aboutToAppear()接口是一个生命周期接口&#xff0c;用于在页面即将显示之前调用。 在ArkUI-X中&#xff0c;aboutToAppear()接口是一个重要的生命周期接口&#xff0c;它会在页…

docker搭建redis集群(三主三从)

本篇文章不包含理论解释&#xff0c;直接开始集群&#xff08;三主三从&#xff09;搭建 环境 centos7 docker 26.1.4 redis latest &#xff08;7.4.2&#xff09; 服务器搭建以及环境配置 请查看本系列前几篇博客 默认已搭建好三个虚拟机并安装配置好docker 相关博客&#xf…