[LeetCode]599. Minimum Index Sum of Two Lists
题目描述
思路
哈希,先存list1的结果
然后扫list2,有与list1相同的存入哈希,同时保留最小和
遍历哈希,值为最小和的string存入数组返回
代码
#include <iostream>
#include <vector>
#include <string>
#include <unordered_map>
#include <algorithm>
using namespace std;
class Solution {
public:
vector<string> findRestaurant(vector<string>& list1, vector<string>& list2) {
unordered_map<string, int> um, repeat;
int min_sum = list1.size() + list2.size();
for (int i = 0; i < list1.size(); ++i) {
um[list1[i]] = i;
}
for (int i = 0; i < list2.size(); ++i) {
if (um.count(list2[i])) {
repeat[list2[i]] = i + um[list2[i]];
min_sum = min(min_sum, i + um[list2[i]]);
}
}
vector<string> res;
for (auto p : repeat)
if (p.second == min_sum) res.push_back(p.first);
return res;
}
};
int main() {
Solution s;
vector<string> list1 = { "Shogun", "Tapioca Express", "Burger King", "KFC" },
list2 = { "Piatti", "The Grill at Torrey Pines", "Hungry Hunter Steakhouse", "Shogun" },
res = {};
res = s.findRestaurant(list1, list2);
for (string str : res)
cout << str << endl;
cout << endl;
system("pause");
return 0;
}