leetcode-599. 两个列表的最小索引总和

599. 两个列表的最小索引总和 - 力扣(Leetcode)

刚开始的思路是搞两个map,但是性能比较差,只需要构建一个map然后遍历第二个list即可

[!添加后可以过滤一些肯定不符合条件的]

if k1 > indexSum {
	continue
}
func findRestaurant(list1 []string, list2 []string) []string {
    if len(list1) == 0 || len(list2) == 0 {
        return []string{}
    }

    map1 := make(map[string]int, len(list1))
    // map2 := make(map[string]int, len(list2))

    for k, v := range list1 {
        map1[v] = k
    }

    indexSum := len(list1) + len(list2)
    ret := []string{}
    for k1, v1 := range list2 {
        // 加上这个条件可以省略很多判断
        if k1 > indexSum {
            continue
        }

        if k2, ok := map1[v1]; ok {
            if k1+k2 < indexSum {
                ret = []string{v1}
                indexSum = k1+k2
            } else if k1 + k2 == indexSum {
                ret = append(ret, v1)
            }
        }
    }

    // for k, v := range list2 {
    //     map2[v] = k
    // }

    // indexSum := len(list1) + len(list2)
    // ret := []string{}

    // for k1, v1 := range map1 {
    //     if v2, ok := map2[k1]; ok {
    //         if v1 + v2 < indexSum {
    //             ret = []string{k1}
    //             indexSum = v1+v2
    //         } else if v1+v2 == indexSum {
    //             ret = append(ret, k1)
    //         }
    //     }
    // }

    return ret
}
posted @ 2023-01-01 17:12  吴丹阳-V  阅读(19)  评论(0)    收藏  举报