leetcode 394

leetcode 394

题目:

http://car.bitauto.com/chexingduibi/?carIDs=122844,123821
904 水果篮问题
抽象问题 :找出连续的只包含两个字母的最长子序列
思想:滑动协议,双指针遍历思想
key point:

  • dic.setdefault(key)以及a=dict.defaultdict(list)/a=defaultdict(list)的区别
    https://foofish.net/setdefault-defaultdict.html
    dict.setdefault()来设置默认值(有建则返回值(类似于get)没建则创建新键 值按照默认参数设置)
  • a=defaultdict(list)(from collections import defaultdict)产生字典的函数,默认值初始化值为list对象
  • 易错点:while嵌套循环注意里面循环条件满足才能跳出去
    class Solution(object):
    def totalFruit(self, tree):
    “”"
    :type tree: List[int]
    :rtype: int
    “”"
    left, right = 0, 0 #左右指针指向0 右指针遍历,左指针控制条件移动(川酷移动)
    res = 0 #记录最优结果(包括合格元素序列数目的最大值 即果实数量)
    cnt = collections.defaultdict(int) #初始默认值为int 0的字典创建存储 以元素种类为键 值为元素数目
    while right < len(tree): #第一个循环 右指针遍历
    cnt[tree[right]] += 1 #右指针对应元素为键的值加一(若没有则初始化你为0=1有则直接加1)
    while len(cnt) > 2: #第二个循环 控制左指针 元素种类超过2 则一直在此循环移动左指针直到只有两种元素
    cnt[tree[left]] -= 1 #左指针对应元素的值-1 左指针移动
    if cnt[tree[left]] == 0: #若值不为1 则一直循环减到0 然后删除该元素
    del cnt[tree[left]]
    left += 1 #第二个循环结束前左指针移动
    res = max(res, right - left + 1) #计算合格区间的元素数 保存最大值
    right += 1 的一个循环结束右指针移动
    return res
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值