力扣599(java&python)- 两个列表的最小索引总和(简单)
题目:
假设 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 中的所有字符串都是 唯一 的。
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/minimum-index-sum-of-two-lists
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解题思路:
【模拟-哈希表】
1.创建一个哈希表,首先遍历list1,将list1中的字符串以[ list1[i], i ]形式的键值对进行存储在哈希表中;
2.设定一个最小索引值min 和 用于存储能够取得最小索引总和的字符串数组 list;
3.遍历list2,判断每一个 list2[j] 是否在哈希表中出现,根据出现的情况进行分情况讨论:
- 如果 list2[j] 没有出现在哈希表中,则跳过;
- 反之,如果list2[j] 出现在哈希表中,计算出当前的索引值cur:
- 如果cur == min,将 list2[j] 加入到 list 中;
- 如果cur < min,更新min值,将 list 清空,然后将当前 list2[j] 加入到 list 中;
- 如果cur > min,忽略,不处理。
4.最后将 list转化成字符串数组进行返回。
java代码:
1 class Solution {
2 public String[] findRestaurant(String[] list1, String[] list2) {
3 Map<String, Integer> map = new HashMap<>();
4 int n = list1.length, m = list2.length;
5 int min = Integer.MAX_VALUE;
6 //将list1中的元素加入哈希表中
7 for(int i = 0; i < n; i++){
8 map.put(list1[i], i);
9 }
10 List<String> list = new ArrayList<>();
11 //遍历list2
12 for(int j = 0; j < m; j++){
13 String s = list2[j];
14 if(!map.containsKey(s)){
15 continue;
16 }else{
17 int cur = map.get(s) + j;
18 if(cur == min){
19 list.add(s);
20 } else if(cur < min){
21 min = cur;
22 list.clear();
23 list.add(s);
24 }
25 }
26 }
27 return list.toArray(new String[list.size()]);
28 }
29 }

python3代码:
1 class Solution:
2 def findRestaurant(self, list1: List[str], list2: List[str]) -> List[str]:
3 map = {}
4 for i, s in enumerate(list1):
5 map[s] = i
6 min = inf
7 list = []
8 for j, s in enumerate(list2):
9 if s in map:
10 cur = j + map[s]
11 if cur == min:
12 list.append(s)
13 elif cur < min:
14 min = cur
15 list.clear()
16 list.append(s)
17 return list

小知识:
1.list<string> res = new ArrayList<>():创建一个string集合对象,List接口 ArrayList实现
List是一种容器,数据链,可以装多种数据类型的数据,但不能同时装多种数据类型,这里<>里的String说明List里面存放的是String类型的数据。元素是有序的,也就是可以根据下标来找出每个元素,但是List只是一个接口,并不能实例化,所以用它的子类ArrayList(数组链)来创建实例。
2.INF / inf:这个值表示“无穷大(infinity 的缩写)”,即超出了计算机可以表示的浮点数的最大范围(或者说超过了 double 类型的最大值)。
力扣599(java&python)- 两个列表的最小索引总和(简单)的更多相关文章
- 领扣(LeetCode)两个列表的最小索引总和 个人题解
假设Andy和Doris想在晚餐时选择一家餐厅,并且他们都有一个表示最喜爱餐厅的列表,每个餐厅的名字用字符串表示. 你需要帮助他们用最少的索引和找出他们共同喜爱的餐厅. 如果答案不止一个,则输出所有答 ...
- Java实现 LeetCode 599 两个列表的最小索引总和(使用hash提高效率)
599. 两个列表的最小索引总和 假设Andy和Doris想在晚餐时选择一家餐厅,并且他们都有一个表示最喜爱餐厅的列表,每个餐厅的名字用字符串表示. 你需要帮助他们用最少的索引和找出他们共同喜爱的餐厅 ...
- Leetcode 599.两个列表的最小索引总和
两个列表的最小索引总和 假设Andy和Doris想在晚餐时选择一家餐厅,并且他们都有一个表示最喜爱餐厅的列表,每个餐厅的名字用字符串表示. 你需要帮助他们用最少的索引和找出他们共同喜爱的餐厅. 如果答 ...
- LeetCode 599: 两个列表的最小索引总和 Minimum Index Sum of Two Lists
题目: 假设 Andy 和 Doris 想在晚餐时选择一家餐厅,并且他们都有一个表示最喜爱餐厅的列表,每个餐厅的名字用字符串表示. Suppose Andy and Doris want to cho ...
- [Swift]LeetCode599. 两个列表的最小索引总和 | Minimum Index Sum of Two Lists
Suppose Andy and Doris want to choose a restaurant for dinner, and they both have a list of favorite ...
- 【leetcode 简单】 第一百五十题 两个列表的最小索引总和
假设Andy和Doris想在晚餐时选择一家餐厅,并且他们都有一个表示最喜爱餐厅的列表,每个餐厅的名字用字符串表示. 你需要帮助他们用最少的索引和找出他们共同喜爱的餐厅. 如果答案不止一个,则输出所有答 ...
- C#LeetCode刷题之#599-两个列表的最小索引总和(Minimum Index Sum of Two Lists)
问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3802 访问. 假设Andy和Doris想在晚餐时选择一家餐厅,并 ...
- 力扣 —— Two Sum ( 两数之和) python实现
题目描述: 中文: 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,你不能重复利 ...
- python两个列表合并为字典,一个作为key,一个作为value
两个列表合并为一个字典函数list_dic(list1,list2)可以直接复制拿走 传入的参数为两个列表,list1准备作为key,list2准备作为value,key和value位置一一对应. d ...
- 力扣(LeetCode)两整数之和 个人题解
不使用运算符 + 和 - ,计算两整数 a .b 之和. 示例 1: 输入: a = 1, b = 2 输出: 3 示例 2: 输入: a = -2, b = ...
随机推荐
- ld: symbol(s) not found for architecture x86_64问题解决
一 写在前面的话: 音频算法仿真过程中,本来是一个跑的好好地程序,突然间在mac下就报错了,出现的错误是: ld: symbol(s) not found for architecture x86_6 ...
- window.showModalDialog与opener及returnValue
首先来看看 window.showModalDialog 的参数 vReturnValue = window.showModalDialog(sURL [, vArguments] [, sFeatu ...
- JavaScript利用反射实现方法注入
1. 引言 反射是一种能够在程序运行时动态访问.修改某个类(对象)中属性和方法的机制 JavaScript在ES6中提供了Reflect 这一个内置的对象,它提供拦截 JavaScript 操作的方法 ...
- wordpress自建博客站,为文章添加显示浏览次数功能
wordpress自建博客站,为文章添加显示浏览次数功能 笔者使用的主题是 GeneratePress 版本:3.1.3 1.后台文章管理列表添加浏览次数列 效果如图: 实现: 编辑funct ...
- Spring框架之IoC( Inversion of Control )基础知识入门
1.IoC创建对象的方式 使用无参构造创建对象 假如要使用有参构造创建: 下标赋值constructor-arg <!--有参--> <bean id="User" ...
- Advanced .Net Debugging 6:程序集加载器
一.简介 这是我的<Advanced .Net Debugging>这个系列的第六篇文章.这篇文章的内容是原书的第二部分的[调试实战]的第四章.这章主要讲的是程序集加载器,比如:CLR 加 ...
- CH395的FTP Server(主动模式)简单应用参考
FTP(File Transfer Protocol,文件传输协议) 是 TCP/IP 协议组中的协议之一.FTP协议包括两个组成部分,其一为FTP服务器,其二为FTP客户端.本篇文章将基于FTP协议 ...
- #特殊判断#牛客练习赛71 A 回文数
题目 分析 首先出现奇数次的数超过1显然无解 并且只有多个0或者只有一个非0数字并且其它都是0也无解 然后由于没有前导0所以先要找到最小的非0数,先占据首尾 最后按照常规方法前一半从左到右依次递增 注 ...
- Jetty使用入门
社区当前推荐开发者使用Jetty 12.X版本. 依据End of Community Support for Jetty 9.x - June 2022,社区对Jetty 9.x的支持,已在2022 ...
- 重磅官宣,OpenHarmony开发者大会来了!
开放原子开源基金会OpenHarmony开发者大会2023将于4月19日在北京召开. 春风送暖万物新,OpenHarmony正当时.诚邀您参加本届大会,聆听行业大咖分享操作系统和开源的最新前沿研究成 ...