LeetCode 599. Minimum Index Sum of Two Lists
来源:互联网 发布:kettle java代码 编辑:程序博客网 时间:2024/06/11 21:02
599. Minimum Index Sum of Two Lists
Description
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.
Solution
- 题意即给出两个字符串数组,让你判断两组字符串中对应相同的字符串的下标和最小的那个字符串。如有多组,不计顺序返回。
- 我的想法很暴力,两层循环,第一层循环控制第一个数组,去找第二个数组中与它相同的字符串,同时记录下标和,如果需要更新,那么更新。 代码如下:
class Solution {public: vector<string> findRestaurant(vector<string>& list1, vector<string>& list2) { int len1 = list1.size(),len2 = list2.size(); vector<string> rnt; int minIndexSum = 2000; for (int i = 0;i < len1;i++) { bool flag = true; for (int j = 0;j < len2 && flag;j++) { if (list1[i] == list2[j]) { if (i + j < minIndexSum) { minIndexSum = i + j; rnt.clear(); rnt.push_back(list1[i]); } else if (i + j == minIndexSum) { rnt.push_back(list1[i]); } flag = false; } } } return rnt; }};
- 还有的优化方案是 将第二层(或者第一层)循环的线性查找替换为使用哈希表存储第二个字符串数组(或者第一个),从而将线性时间优化为O(1),在题解中拿来的代码如下,侵删。
vector<string> findRestaurant(vector<string>& list1, vector<string>& list2) { vector<string>res; unordered_map<string,int>m; int min=INT_MAX; for(int i=0;i<list1.size();i++) m[list1[i]]=i; for(int i=0;i<list2.size();i++) if(m.count(list2[i])!=0) if(m[list2[i]]+i<min) min=m[list2[i]]+i,res.clear(),res.push_back(list2[i]); else if(m[list2[i]]+i==min) res.push_back(list2[i]); return res;}
- 这也提供了一种对于特定类型的优化方案,今后如果遇到仅涉及查找类的操作,我们可以使用哈希表从而将线性时间优化至常数时间。
阅读全文
0 0
- [leetcode] 599. Minimum Index Sum of Two Lists
- leetcode 599. Minimum Index Sum of Two Lists
- LeetCode 599. Minimum Index Sum of Two Lists(map,unordered_map)
- LeetCode-599. Minimum Index Sum of Two Lists
- Leetcode-599.Minimum Index Sum of Two Lists
- leetcode 599. Minimum Index Sum of Two Lists
- [LeetCode]599. Minimum Index Sum of Two Lists
- LeetCode 599. Minimum Index Sum of Two Lists
- 【LeetCode】599. Minimum Index Sum of Two Lists
- leetcode 599. Minimum Index Sum of Two Lists
- 599. Minimum Index Sum of Two Lists
- 599. Minimum Index Sum of Two Lists
- 599. Minimum Index Sum of Two Lists
- 599. Minimum Index Sum of Two Lists
- 599. Minimum Index Sum of Two Lists
- 599. Minimum Index Sum of Two Lists
- 599. Minimum Index Sum of Two Lists
- 599. Minimum Index Sum of Two Lists
- 4 Values whose Sum is 0 --CSU-ACM2017暑假集训2-二分搜索
- hdu 1166 敌兵布阵【入门线段树 & 树状数组】
- 选择排序
- 《如何管理程序猿》
- bzoj3545[ONTAK2010]Peaks 线段树合并+离散
- LeetCode 599. Minimum Index Sum of Two Lists
- oracle 数据库 练习题2
- @font-face属性参数详细介绍
- 设计一个名为Account的类
- 2119数据结构实验之链表四:有序链表的归并
- 题目1007:奥运排序问题
- 手写svm识别人是否戴眼镜
- 619. Biggest Single Number--MAX()
- java定时任务调度工具之Timer