题目:

假设 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)- 两个列表的最小索引总和(简单)的更多相关文章

  1. 领扣(LeetCode)两个列表的最小索引总和 个人题解

    假设Andy和Doris想在晚餐时选择一家餐厅,并且他们都有一个表示最喜爱餐厅的列表,每个餐厅的名字用字符串表示. 你需要帮助他们用最少的索引和找出他们共同喜爱的餐厅. 如果答案不止一个,则输出所有答 ...

  2. Java实现 LeetCode 599 两个列表的最小索引总和(使用hash提高效率)

    599. 两个列表的最小索引总和 假设Andy和Doris想在晚餐时选择一家餐厅,并且他们都有一个表示最喜爱餐厅的列表,每个餐厅的名字用字符串表示. 你需要帮助他们用最少的索引和找出他们共同喜爱的餐厅 ...

  3. Leetcode 599.两个列表的最小索引总和

    两个列表的最小索引总和 假设Andy和Doris想在晚餐时选择一家餐厅,并且他们都有一个表示最喜爱餐厅的列表,每个餐厅的名字用字符串表示. 你需要帮助他们用最少的索引和找出他们共同喜爱的餐厅. 如果答 ...

  4. LeetCode 599: 两个列表的最小索引总和 Minimum Index Sum of Two Lists

    题目: 假设 Andy 和 Doris 想在晚餐时选择一家餐厅,并且他们都有一个表示最喜爱餐厅的列表,每个餐厅的名字用字符串表示. Suppose Andy and Doris want to cho ...

  5. [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 ...

  6. 【leetcode 简单】 第一百五十题 两个列表的最小索引总和

    假设Andy和Doris想在晚餐时选择一家餐厅,并且他们都有一个表示最喜爱餐厅的列表,每个餐厅的名字用字符串表示. 你需要帮助他们用最少的索引和找出他们共同喜爱的餐厅. 如果答案不止一个,则输出所有答 ...

  7. C#LeetCode刷题之#599-两个列表的最小索引总和​​​​​​​​​​​​​​(Minimum Index Sum of Two Lists)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3802 访问. 假设Andy和Doris想在晚餐时选择一家餐厅,并 ...

  8. 力扣 —— Two Sum ( 两数之和) python实现

    题目描述: 中文: 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,你不能重复利 ...

  9. python两个列表合并为字典,一个作为key,一个作为value

    两个列表合并为一个字典函数list_dic(list1,list2)可以直接复制拿走 传入的参数为两个列表,list1准备作为key,list2准备作为value,key和value位置一一对应. d ...

  10. 力扣(LeetCode)两整数之和 个人题解

    不使用运算符 + 和 - ​​​​​​​,计算两整数 ​​​​​​​a .b ​​​​​​​之和. 示例 1: 输入: a = 1, b = 2 输出: 3 示例 2: 输入: a = -2, b = ...

随机推荐

  1. 安装VMware——Unable to install all modules.See log /tmp/vmware-han/vmware-6098.log for detalls.(Exit code 1)的解决方法(模块加载失败)

    这是编译失败的原因在VM社区有这样一种解决方案,亲测有效,帮助我自己解决的麻烦,所有在这分享,希望能够帮助到小伙伴:不要被接下来的代码吓倒因为这是github上项目,所以要先在ubuntu上安装git ...

  2. -Dmaven.multiModuleProjectDirectory system propery is not set解决方案

    myeclipse中使用maven插件的时候,运行run as maven build的时候报错 -Dmaven.multiModuleProjectDirectory system propery ...

  3. GDB简洁指南

    启动gdb:gdb program 设置运行参数:set args 10 20 30 启动程序: run(r),start 显示源代码:list(l) 显示当前栈帧和运行行:frame(f) 设置显示 ...

  4. uni学习笔记分享

    目录介绍 01.遇到问题汇总 02.关于布局设置 03.基础语法总结 04.关于交互问题 06.关于回传数据 07.关于网络请求 08.关于页面刷新 09.关于注意问题 10.待解决和思考 01.遇到 ...

  5. [.NET项目实战] Elsa开源工作流组件应用(二):内核解读

    @ 目录 定义 变量 内存寄存器类 寄存器中的存储区块类 变量到存储的映射类 上下文对象 活动上下文(ActivityExecutionContext) 工作流执行上下文(WorkflowExecut ...

  6. 从时间复杂度的角度出发,list和vector之间查找,插入,删除等数据操作的区别

    list和vector是STL(标准模板库)中常用的两种序列容器,它们各自在不同类型的操作上有着不同的优势.下面是list和vector在不同操作上的擅长之处: list的擅长操作 插入和删除操作:l ...

  7. 记录--10个超级实用的Set、Map使用技巧

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 Set是一种类似于数组的数据结构,但是它的值是唯一的,即Set中的每个值只会出现一次.Set对象的实例可以用于存储任何类型的唯一值,从而使 ...

  8. 如何用Flask中的Blueprints构建大型Web应用

    本文分享自华为云社区<构建大型Web应用Flask中的Blueprints指南>,作者: 柠檬味拥抱. 什么是Blueprints? Blueprints是Flask中的一种模式,用于将应 ...

  9. KingbaseES V8R6集群运维案例之---sys_backup.sh init ‘xxxx invalid’故障

    KingbaseES V8R6集群运维案例之---sys_backup.sh init 'xxxx invalid'故障 案例说明 在KingbaseES V8R6集群sys_backup.sh在cl ...

  10. #树状数组#洛谷 3531 [POI2012] LIT-Letters

    题目 给出两个长度相同且由大写英文字母组成的字符串\(A\).\(B\),保证\(A\)和\(B\)中每种字母出现的次数相同. 现在每次可以交换\(A\)中相邻两个字符,求最少需要交换多少次可以使得\ ...