904. 水果成篮

904. 水果成篮

题目描述

题目链接:904水果成蓝
你正在探访一家农场,农场从左到右种植了一排果树。这些树用一个整数数组 fruits 表示,其中 fruits[i] 是第 i 棵树上的水果 种类 。你想要尽可能多地收集水果。然而,农场的主人设定了一些严格的规矩,你必须按照要求采摘水果:
你只有 两个 篮子,并且每个篮子只能装 单一类型 的水果。每个篮子能够装的水果总量没有限制。你可以选择任意一棵树开始采摘,你必须从 每棵 树(包括开始采摘的树)上 恰好摘一个水果 。采摘的水果应当符合篮子中的水果类型。每采摘一次,你将会向右移动到下一棵树,并继续采摘。一旦你走到某棵树前,但水果不符合篮子的水果类型,那么就必须停止采摘。给你一个整数数组 fruits ,返回你可以收集的水果的 最大 数目。

解题思路

树由整数数组fruits表示,其中水果[i]是第i棵树产生的水果类型。 你想收集尽可能多的水果。但是,所有者有一些严格的规则,您必须遵守: 你只有两个篮子,每个篮子只能装一种水果。每篮水果的数量没有限制。 从您选择的任何一棵树开始,您必须在向右移动时从每棵树(包括起始树)中恰好摘下一个水果,摘下的水果必须放在你的一个篮子里。 一旦你到了一棵树上,树上的果实没法放入你的篮子(两个篮子已经满了),你必须停下来。 给定整数数组水果,返回可以拾取的最大水果数。 本题,其实就是选只有两个元素的最长连续子序列,比如1,2,3,2,2最长就是2,3,2,2(只包括2或者3,而且是最长的)。

代码演示–暴力解法

def totalFruit(fruits):
    """
    :type fruits: List[int]
    :rtype: int
    """
    res = 0
    num = []

    for i in range(len(fruits)):
       j = i
        while (len(set(num)) <= 2 and j < len(fruits)):
            num.append(fruits[j])
            j += 1

        if(len(set(num)) <= 2 ):
            res = max(res, len(num))
        elif(len(set(num)) == 3):
            res = max(res,len(num) - 1)


        del num[:]

    return res



# fruits = [1,2,1]
# fruits =  [0,1,2,2]
# fruits =   [1,2,3,2,2]
# fruits =   [3,3,3,1,2,1,1,2,3,3,4]
fruits =   [1,1]
r = totalFruit(fruits)
print(r)

超时间限制,呜呜呜

代码演示–滑动窗口

class Solution:
    def totalFruit(self, fruits: List[int]) -> int:
        if(len(fruits) == 1 or len(fruits) == 2):
            return len(fruits)
        
        # 记录当前篮子里的水果
        basket1 = -1
        basket2 = -1
        sum = 0
        # 记录当前的水果和当前水果的起始位置
        curfruit = -1
        curfruitloc = 0
        subsum = 0

        # 当前篮子起始位置
        index = 0

        for i in range(len(fruits)):
            if(fruits[i] == basket1 or fruits[i] == basket2):
                if(fruits[i] != curfruit):
                    curfruit = fruits[i]
                    curfruitloc = i
            else:
                index = curfruitloc
                curfruitloc = i
                if(basket1 == curfruit):
                    basket2 = fruits[i]
                    curfruit = basket2
                else:
                    basket1 = fruits[i]
                    curfruit = basket1
            subsum = i - index + 1
            sum = sum if sum > subsum else subsum
        return sum

在这里插入图片描述

参考

链接:https://leetcode-cn.com/problems/fruit-into-baskets

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Peihj2021

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值