# leetcode-599-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 restaurants represented by strings.

You need to help them find out their common interest with the least list index sum. If there is a choice tie between answers, output all of them with no order requirement. You could assume there always exists an answer.

Example 1:

```Input:
["Shogun", "Tapioca Express", "Burger King", "KFC"]
["Piatti", "The Grill at Torrey Pines", "Hungry Hunter Steakhouse", "Shogun"]
Output: ["Shogun"]
Explanation: The only restaurant they both like is "Shogun".```

Example 2:

```Input:
["Shogun", "Tapioca Express", "Burger King", "KFC"]
["KFC", "Shogun", "Burger King"]
Output: ["Shogun"]
Explanation: The restaurant they both like and have the least index sum is "Shogun" with index sum 1 (0+1).```

Note:

1. The length of both lists will be in the range of [1, 1000].
2. The length of strings in both lists will be in the range of [1, 30].
3. The index is starting from 0 to the list length minus 1.
4. No duplicates in both lists.

### 要完成的函数：

vector<string> findRestaurant(vector<string>& list1, vector<string>& list2)

### 说明：

1、给定两个vector，里面分别存储两个人的喜好餐厅名字，最开始是最喜欢的，接下来其次……这样子排列下去。

2、首先，如果想要花费时间够少，我们可以增加空间复杂度，使用map来存储给定vector中的餐厅名字和餐厅的喜好顺序。

```    vector<string> findRestaurant(vector<string>& list1, vector<string>& list2)
{
unordered_map<string,int>m1;//使用unordered_map速度更快
int min1=INT_MAX;
int j,t;
vector<string>res;
for(int i=0;i<list1.size();i++)//存储餐厅名称和喜好顺序
m1[list1[i]]=i;
for(int i=0;i<list2.size();i++)
{
if(m1.count(list2[i])==0)//如果没有出现过，那么不是共同餐厅
continue;
else
min1=min(min1,m1[list2[i]]+i);//存储最小的喜好顺序的和
}
for(int i=0;i<list2.size();i++)
{
if(m1.count(list2[i])==0)//如果没有出现过，那么不是共同餐厅
continue;
else
{
if((m1[list2[i]]+i)==min1)//如果等于最小值，那么存储
res.push_back(list2[i]);
}
}
return res;
}```

3、改进：

```    vector<string> findRestaurant(vector<string>& list1, vector<string>& list2)
{
vector<string>res;
unordered_map<string,int>m1;
int min1=INT_MAX;
for(int i = 0; i < list1.size(); i++)
m1[list1[i]] = i;
for(int i = 0; i < list2.size(); i++)
{
if(m1.count(list2[i]) != 0)
{
if(m1[list2[i]] + i < min1)
{
min1=m1[list2[i]] + i;
res.clear();
res.push_back(list2[i]);
}
else if(m1[list2[i]] + i == min1)
res.push_back(list2[i]);
}

}
return res;
}```

0 条评论

### 相关文章

起因是网友“国王与乞丐”反馈的http://lpl.qq.com/es/live.shtml页面播放不了flash。

• ### 【SQL】小心在循环中声明变量——浅析SQL变量作用域

如果你认为这个语句跑起来没问题，那你值得看下去，会避免以后踩到【SQL变量作用域】的坑。

• ### VS 2013 打包程序教程

如果你只是想要在他人的机子上运行你的程序而不想安装，有一种简单的方法，只要使用本教程的“步骤—3.生成Release 文件夹”即可。但是有一点需要注意，如果你在...

• ### JNI编程demo

每隔一秒产生一个随机数，就设定为压力值，然后在ProgressBar上显示出来。一般来讲用java也能做，但这次用jni来做 先定义一个操作类

• ### 团队效率工具: 代码格式化之Clang-format

平时团队进行合作的时候需要注意代码的格式，虽然很难统一每个人的编码风格，但是通过工具能够很好的管理代码格式。这里介绍下clang-format，它是基于clan...

• ### C#脚本实践(三): 集成到游戏

至此, C#做为脚本已经完全可行了: 可嵌入, 跨平台, 高效率, 热更新, 几乎可以忽略的编译时间, 强大的IDE支持, 丰富的第三方库, 部分动态语言特性的...

• ### 编程小知识之 Dispose 模式

之前对 C# 中的 Dispose 模式只有些模糊印象,近来又了解了一些相关知识,在此简单做些记录~

• ### C/C++常见错误汇总

出错原因： main.cpp中没有找到对应的函数名声明，没有在.cpp引用包含该函数名的头文件.h。 解决方法： 引入对应头文件。

• ### C++函数模板与分离编译模式

一个程序（项目）由若干个源文件共同实现，而每个源文件单独编译生成目标文件，最后将所有目标文件连接起来形成单一的可执行文件的过程称为分离编译模式。

• ### C#正则表达式判断字符串中是否有数…

int count = Regex.Matches(test, @"\d").Count;