问题描述:
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.
示例:
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".
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).问题分析:
遍历两个数组,统计相同元素的索引和,始终将索引和最小的保存下来。最后,根据索引求元素值。
过程详见代码:
class Solution {
public:
vector<string> findRestaurant(vector<string>& list1, vector<string>& list2) {
vector<vector<pair<int, int>>> res(1),temp(1);
int mini = list1.size() + list2.size();
for (int i = 0; i < list1.size(); i++)
{
for (int j = 0; j < list2.size(); j++)
{
if (list1[i] == list2[j])
{
if (i + j < mini)
{
mini = i + j;
temp = res;
temp[0].push_back(pair<int, int>(i, j));
}
else if (i + j == mini)
{
temp[0].push_back(pair<int, int>(i, j));
}
}
}
}
vector<string> vres;
for (int i = 0; i < temp[0].size(); i++)
{
vres.push_back(list1[temp[0][i].first]);
}
return vres;
}
};