最长无重复子数组

利用解法字典与队列优化数组元素遍历

题目

在这里插入图片描述

解法 字典 + 队列

遍历数组,新的元素element 不在字典中,将元素同时加入到字典和队列中。字典的key是元素值,value是什么不重要
如果已经在列表中,则要弹出这个元素及其前面的所有元素,相应地删除字典中地这些元素,在队列和字典中加入这个元素

[1,2,3,2,5]

  1. 遍历到1,dic={1:0} quee = [1]
  2. dic={1:0,2:0} quee = [1,2]
  3. dic={1:0,2:0,3:0} quee = [1,2,3]
  4. 遇到字典中已经有的元素了,弹出队列中的元素了,同时删除字典中的元素。
    dic = {2:0,3:0}(1删掉了),quee = [3,2]
  5. 遍历到5,加入dic = {2:0,3:0,5:0},quee = [3,2,5]
class Solution:
    def maxLength(self , arr ):
        if not arr:
            return 0
        max_length = 1
        temp_count = 1
        dic = {arr[0]:0}
        quee = [arr[0]]
        l = len(arr)
        for i in range(1,l):
            if arr[i] not in dic:
                quee.append(arr[i])
                dic[arr[i]] = 0
                temp_count = len(quee)
                max_length = max(temp_count,max_length)
            else:
                while quee and quee[0] != arr[i]:
                    dic.pop(quee.pop(0))
                if quee:
                    quee.pop(0)
                    quee.append(arr[i])
                    dic[arr[i]] = 0
        return max_length
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值