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,一经查实,立即删除!

相关文章

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

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

stm32教程:EXTI外部中断应用

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

护眼好帮手: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…

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播放器对应的…

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

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

接口使用实例(2)

大家好&#xff0c;今天我们来解答一下昨天留下的一个问题&#xff0c;并且继续来看一些接口使用实例。 通过String类中重写的方法compareTo来实现我们的比较name的需求&#xff1a; 2,用Comparator接口来实现类的比较(比较器) 了解即可&#xff0c;以后会详细讲。 知识点:C…

基于Springboot的社区药房管理系统

博主介绍&#xff1a;java高级开发&#xff0c;从事互联网行业多年&#xff0c;熟悉各种主流语言&#xff0c;精通java、python、php、爬虫、web开发&#xff0c;已经做了多年的设计程序开发&#xff0c;开发过上千套设计程序&#xff0c;没有什么华丽的语言&#xff0c;只有实…

vue框架技术相关概述以及前端框架整合

vue框架技术概述及前端框架整合 1 node.js 介绍&#xff1a;什么是node.js Node.js就是运行在服务端的JavaScript。 Node.js是一个事件驱动I/O服务端JavaScript环境&#xff0c;基于Google的V8引擎。 作用 1 运行java需要安装JDK&#xff0c;而Node.js是JavaScript的运行环…

MATLAB的数据类型和各类数据类型转化示例

一、MATLAB的数据类型 在MATLAB中 &#xff0c;数据类型是非常重要的概念&#xff0c;因为它们决定了如何存储和操作数据。MATLAB支持数值型、字符型、字符串型、逻辑型、结构体、单元数组、数组和矩阵等多种数据类型。MATLAB 是一种动态类型语言&#xff0c;这意味着变量的数…

密码强度验证代码解析:C语言实现与细节剖析

在日常的应用开发中&#xff0c;密码强度验证是保障用户账户安全的重要环节。今天&#xff0c;我们就来深入分析一段用C语言编写的密码强度验证代码&#xff0c;看看它是如何实现对密码强度的多维度检测的。 代码整体结构 这段C语言代码主要实现了对输入密码的一系列规则验证&a…

蓝桥杯模拟算法:多项式输出

P1067 [NOIP2009 普及组] 多项式输出 - 洛谷 | 计算机科学教育新生态 这道题是一道模拟题&#xff0c;我们需要分情况讨论&#xff0c;我们需要做一下分类讨论 #include <iostream> #include <cstdlib> using namespace std;int main() {int n;cin >> n;for…

Pytorch框架从入门到精通

目录 一、Tensors 1.1 初始化一个Tensor 1&#xff09;赋值初始化 2&#xff09;从 NumPy 数组初始化 3&#xff09;从另一个张量 4&#xff09;使用随机值或常量值 1.2 Tensor 的属性 1.3 对 Tensor 的操作 1.3.1 总体介绍 1.3.2 索引和切片 1.3.3 算术运算 矩阵乘…

2024年数据记录

笔者注册时间超过98.06%的用户 CSDN 原力是衡量一个用户在 CSDN 的贡献和影响力的系统&#xff0c;笔者原力值超过99.99%的用户 其他年度数据

【已解决】黑马点评项目Redis版本替换过程的数据迁移

黑马点评项目Redis版本替换过程的数据迁移 【哭哭哭】附近商户中需要用到的GEO功能只在Redis 6.2以上版本生效 如果用的是老版本&#xff0c;美食/KTV的主页能正常返回&#xff0c;但无法显示内容 上次好不容易升到了5.0以上版本&#xff0c;现在又用不了了 Redis 6.2的windo…

Win11下帝国时代2无法启动解决方法

鼠标右键点图标&#xff0c;选择属性 点开始&#xff0c;输入启用和关闭