刷题日常之LeetCode599,两个列表的最小索引总和

我目前刷题最大的问题在于,简单的题目一般一分钟就有时间复杂度不错的思路了,但落实到代码上尝尝花费一个小时以上的时间,反复执行多次,经历多次的报错之后,才逐步完善。这就是之前代码一直流于纸面,喜欢写伪代码和思路却不落实到编程上的恶果。

我一开始的思路就是给list1做一个哈希表,即{餐馆名:数组下标};

然后定义一个res数组,储存具有最小索引和的餐馆。定义minIndex储存最小索引值

再遍历list2,如果list2中的餐厅与list1中餐厅名字相同,就将该索引和与最小索引和做比较。如果小于最小索引和,则清空res数组,再把该餐馆名储存到res中,再更新minIndex;如果等于最小索引和,则res.append当前餐馆

但很快我发现一个问题,那就是刚接触python的我不知道怎么定义哈希表,后来我才发现有字典这么个好东西。

运用字典后,执行出错。

class Solution:
    def findRestaurant(self, list1: List[str], list2: List[str]) -> List[str]:
        len1 = len(list1)
        len2 = len(list2)
        lenres = min(len1,len2)
        res = [""]*lenres
        minindex = 2000
        mydict = {}
        for i in range(0,len1):
            mydict.update({list1[i]:i})
        for j in range(0,len2):
            if mydict[list2[j]]+j < minindex:
                res.clear()
                res.append(list2[j])
                minindex = mydict[list2[j]]+j
            elif mydict[list2[j]]+j == minindex:
                res.append(list2[j])
        return res

原来是因为,如果python的字典中没有当前的键,就会直接报错而不是返回false值。因此我使用了dict.get(key,default)函数,当字典中没有相应的key值会直接返回默认值,而不是报错。

最终代码:

class Solution:
    def findRestaurant(self, list1: List[str], list2: List[str]) -> List[str]:
        len1 = len(list1)
        len2 = len(list2)
        lenres = min(len1,len2)
        res = [""]*lenres
        minindex = 2000
        mydict = {}
        for i in range(0,len1):
            mydict.update({list1[i]:i})
        for j in range(0,len2):
            if (mydict.get(list2[j],"none")!="none"):
                if mydict[list2[j]]+j < minindex:
                    res.clear()
                    res.append(list2[j])
                    minindex = mydict[list2[j]]+j
                elif mydict[list2[j]]+j == minindex:
                    res.append(list2[j])
        return res

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值