Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情。
一、题目描述
- 假设 Andy 和 Doris 想在晚餐时选择一家餐厅,并且他们都有一个表示最喜爱餐厅的列表,每个餐厅的名字用字符串表示。
- 你需要帮助他们用最少的索引和找出他们共同喜爱的餐厅。 如果答案不止一个,则输出所有答案并且不考虑顺序。 你可以假设答案总是存在。
- 示例 1:
- 输入: list1 = ["Shogun", "Tapioca Express", "Burger King", "KFC"],list2 = ["Piatti", "The Grill at Torrey Pines", "Hungry Hunter Steakhouse", "Shogun"]
- 输出: ["Shogun"]
- 解释: 他们唯一共同喜爱的餐厅是“Shogun”。
- 示例 2:
- 输入:list1 = ["Shogun", "Tapioca Express", "Burger King", "KFC"],list2 = ["KFC", "Shogun", "Burger King"]
- 输出: ["Shogun"]
- 解释: 他们共同喜爱且具有最小索引和的餐厅是“Shogun”,它有最小的索引和1(0+1)。
- 提示:
1 <= list1.length, list2.length <= 10001 <= list1[i].length, list2[i].length <= 30list1[i]和list2[i]由空格' '和英文字母组成。list1的所有字符串都是 唯一 的。list2中的所有字符串都是 唯一 的。
二、思路分析:
- 要求输出数组交集,且交集字符串在各自数组中的下标和最小
- 根据两个数组的长度,定义好一个二维数组,用来按顺序保存数组交集
- 首先将数组的交集部分取出来,根据交集在原数组的位置,保存在定义好的二维数组中,二维数组的位置前后即下标和的大小
- 遍历二维数组,去除掉长度为
0的空数组,第一个长度不为0的字数组就是下标和最小的数组交集
三、AC 代码:
function findRestaurant(list1: string[], list2: string[]): string[] {
let result = [];
for(let i = 0; i < list1.length + list2.length; i++){
result.push([]);
}
for(let i = 0; i < list1.length; i++){
for(let j = 0; j < list2.length; j++){
if(list1[i] === list2[j]){
result[i+j].push(list1[i])
}
}
}
for(let i = 0; i < result.length; i++){
if(result[i].length !== 0){
return result[i]
}
}
};
四、总结:
- 注意一下相同项的下标和相同的问题,比如
0+2和1+1,需要在原有的基础上push - 解决方式复杂是复杂了点,能跑就行
- 查看更多方法移步题解区