两个列表的最小索引总和

149 阅读2分钟

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 <= 1000
    • 1 <= list1[i].length, list2[i].length <= 30
    • list1[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+21+1,需要在原有的基础上push
  • 解决方式复杂是复杂了点,能跑就行a926da4a-3d09-46d2-9b34-acc317608526.png
  • 查看更多方法移步题解区