LeetCode算法题-Minimum Index Sum of Two Lists(Java实现)
这是悦乐书的第272次更新,第286篇原创
01 看题和准备
今天介绍的是LeetCode算法题中Easy级别的第139题(顺位题号是599)。假设Andy和Doris想要选择一家餐馆吃晚餐,他们都有一个最受欢迎的餐馆列表。你需要用最少的列表索引总和帮助他们找出他们的共同兴趣。如果答案之间存在选择关系,则输出所有答案并且没有顺序要求。你可以假设总有一个答案。例如:
输入:
["Shogun", "Tapioca Express", "Burger King", "KFC"]
["Piatti", "The Grill at Torrey Pines", "Hungry Hunter Steakhouse", "Shogun"]
输出: ["Shogun"]
说明: 他们都喜欢的唯一一家餐厅是“Shogun”。
输入:
["Shogun", "Tapioca Express", "Burger King", "KFC"]
["KFC", "Shogun", "Burger King"]
输出: ["Shogun"]
说明: 他们喜欢并且索引总和最少的餐馆是“Shogun”,索引和1(0 + 1)。
注意:
两个列表的长度将在[1,1000]的范围内。
两个列表中的字符串长度将在[1,30]的范围内。
索引从0开始到列表长度减去1。
两个列表中都没有重复项。
本次解题使用的开发工具是eclipse,jdk使用的版本是1.8,环境是win7 64位系统,使用Java语言编写和测试。
02 第一种解法
使用两个HashMap,分别将list1和list2的元素存入其中,以元素值为key,索引为value。定义一个最小值min,初始值为int的最大值,然后遍历其中一个map的key值,如果第二个map中也存在该key,此时分为两种情况处理。
第一种情况,如果该key值对应两索引之和小于min,那么将min更新,再将结果数组清空,再将该key添加进结果数组。
第二种情况,如果该key值对应两索引之和等于min,表明存在另外一对索引之和,直接将key添加进结果数组即可。
最后返回结果数组。
public String[] findRestaurant(String[] list1, String[] list2) {
Map<String, Integer> map = new HashMap<>();
Map<String, Integer> map2 = new HashMap<>();
for(int i=0; i<list1.length; i++){
map.put(list1[i], i);
}
for(int i=0; i<list2.length; i++){
map2.put(list2[i], i);
}
int min = Integer.MAX_VALUE;
List<String> result = new ArrayList<>();
for (String key : map.keySet()) {
if (map2.containsKey(key)) {
if (map.get(key)+map2.get(key) < min) {
min = map.get(key)+map2.get(key);
result = new ArrayList<>();
result.add(key);
} else if (map.get(key)+map2.get(key) == min) {
result.add(key);
}
}
}
return result.toArray(new String[result.size()]);
}
03 第二种解法
我们可以将第一种解法再简化下,只使用一个HashMap,然后遍历剩下的那个数组,判断思路与第一种解法一致。同时,我们也可以将循环内部使用创建新对象来清空数组的方法,换成其自身的clear()方法。
public String[] findRestaurant2(String[] list1, String[] list2) {
Map<String, Integer> map = new HashMap<>();
for(int i=0; i<list1.length; i++){
map.put(list1[i], i);
}
int min = Integer.MAX_VALUE;
List<String> result = new ArrayList<>();
for (int i=0; i<list2.length; i++) {
if (map.containsKey(list2[i])) {
if (map.get(list2[i])+i < min) {
min = map.get(list2[i])+i;
result.clear();
result.add(list2[i]);
} else if (map.get(list2[i])+i == min) {
result.add(list2[i]);
}
}
}
return result.toArray(new String[result.size()]);
}
04 第三种解法
我们也可以不使用HashMap,直接使用for循环来解决。
public String[] findRestaurant3(String[] list1, String[] list2) {
int min = Integer.MAX_VALUE;
List<String> result = new ArrayList<>();
for (int i=0; i<list1.length; i++) {
for (int j=0; j<list2.length; j++) {
if (list1[i].equals(list2[j])) {
if (j+i < min) {
min = j+i;
result.clear();
result.add(list1[i]);
} else if (j+i == min) {
result.add(list1[i]);
}
}
}
}
return result.toArray(new String[result.size()]);
}
05 小结
算法专题目前已日更超过四个月,算法题文章139+篇,公众号对话框回复【数据结构与算法】、【算法】、【数据结构】中的任一关键词,获取系列文章合集。
以上就是全部内容,如果大家有什么好的解法思路、建议或者其他问题,可以下方留言交流,点赞、留言、转发就是对我最大的回报和支持!
LeetCode算法题-Minimum Index Sum of Two Lists(Java实现)的更多相关文章
- LeetCode算法题-Minimum Distance Between BST Nodes(Java实现-四种解法)
这是悦乐书的第314次更新,第335篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第183题(顺位题号是783).给定具有根节点值的二叉搜索树(BST),返回树中任何两个 ...
- LeetCode算法题-Minimum Absolute Difference in BST(Java实现)
这是悦乐书的第253次更新,第266篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第120题(顺位题号是530).给定具有非负值的二叉搜索树,找到任意两个节点的值之间的最 ...
- LeetCode算法题-Minimum Depth of Binary Tree(Java实现)
这是悦乐书的第168次更新,第170篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第27题(顺位题号是111).给定二叉树,找到它的最小深度.最小深度是沿从根节点到最近的 ...
- 【LeetCode】599. Minimum Index Sum of Two Lists 解题报告(Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 方法一:找到公共元素再求索引和 方法二:索引求和,使 ...
- LeetCode 题解之Minimum Index Sum of Two Lists
1.题目描述 2.问题分析 直接是用hash table 解决问题 3.代码 vector<string> findRestaurant(vector<string>& ...
- 【Leetcode_easy】599. Minimum Index Sum of Two Lists
problem 599. Minimum Index Sum of Two Lists 题意:给出两个字符串数组,找到坐标位置之和最小的相同的字符串. 计算两个的坐标之和,如果与最小坐标和sum相同, ...
- LeetCode算法题-Minimum Moves to Equal Array Elements(Java实现)
这是悦乐书的第233次更新,第246篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第100题(顺位题号是453).给定大小为n的非空整数数组,找到使所有数组元素相等所需的 ...
- LeetCode算法题-Peak Index in a Mountain Array(Java实现)
这是悦乐书的第329次更新,第352篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第199题(顺位题号是852).如果以下属性成立,我们将数组A称为山: A.length ...
- LeetCode算法题-Maximum Product of Three Numbers(Java实现)
这是悦乐书的第275次更新,第291篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第143题(顺位题号是628).给定一个整数数组,从其中找出三个数,使得乘积最大.例如: ...
随机推荐
- 【Spark篇】--Spark中的宽窄依赖和Stage的划分
一.前述 RDD之间有一系列的依赖关系,依赖关系又分为窄依赖和宽依赖. Spark中的Stage其实就是一组并行的任务,任务是一个个的task . 二.具体细节 窄依赖 父RDD和子RDD parti ...
- Nginx学习系列四默认负载均衡轮询及Ip_hash等常用指令介绍
一.简介 Upstream模块是Nginx中一个核心模块,当客户端访问Nginx服务器的时候,Nginx会从服务器列表中选取压力小的服务器,然后分配给客户端进行访问.这个过程,Nginx通过轮询算法轮 ...
- Shader 入门笔记(一) 如何学习shader
本笔记,是根据自己学习shader的笔记,主要是参照冯乐乐的<Shader 入门精要> 和游戏蛮牛shaderLad视频 和网上一些博客. 为啥要学习这个呐? 自己其实之前学过一段时间的s ...
- Ajax上传图片以及上传之前先预览
手头上有几个小项目用到了easyUI,一开始决定使用easyUI就注定了项目整体上前后端分离,基本上所有的请求都采用Ajax来完成.在文件上传的时候用到了Ajax上传文件,以及图片在上传之前的预览效果 ...
- Connection open error . Connection Timeout Expired. The timeout period elapsed during the post-login phase.
是这样的,最近我在开发Api(重构),用的数据库是Sqlserver,使用的Orm是 SqlSugar(别问我为什么选这个,boss选的同时我也想支持国人写的东西,且文档也很全). 被催的是,写好了程 ...
- npm用法
查看包信息npm info mongodb 查看包的最新版本npm view mongodb version 安装npm install mongodb@2.2.33 已安装的包修改版本npm ins ...
- iOS逆向开发(7):微信伪装他人
上一节小程介绍了微信在进入"附近的人"时修改位置信息的办法,这一次,小程来修改"自己"的信息,伪装成别人. 但是,这里的伪装只是"本地的伪装" ...
- leetcode — convert-sorted-list-to-binary-search-tree
import java.util.ArrayList; import java.util.Arrays; import java.util.List; /** * Source : https://o ...
- 痞子衡嵌入式:第一本Git命令教程(4)- 转移(add/rm/mv)
今天是Git系列课程第四课,上一课我们在Git空间里做了一些文件改动并且知道了如何利用Git查看这些变动,今天痞子衡要讲的是将这些变动提交到Git本地仓库前的准备工作. Git仓库目录下的文件改动操作 ...
- Redux进阶(Immutable.js)
更好的阅读体验 更好的阅度体验 Immutable.js Immutable的优势 1. 保证不可变(每次通过Immutable.js操作的对象都会返回一个新的对象) 2. 丰富的API 3. 性能好 ...