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

博主分享了在解决一道算法题时遇到的问题,即从思路到实现代码的转换困难。最初尝试用哈希表(误称为字典)来优化搜索,但在实际编写过程中遇到了错误。博主发现Python字典在键不存在时会报错,于是改用get()方法避免这一问题。最终,博主成功实现了利用哈希表找到餐馆列表中具有最小索引和的餐馆的解决方案。
摘要由CSDN通过智能技术生成

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

我一开始的思路就是给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、付费专栏及课程。

余额充值