leetcode 904. Fruit Into Baskets(水果放进篮子)

论文阅读 Quantum Convolutional neural network 在传统的局域序参量(如磁化强度 ⟨Xi⟩)无法有效区分某些拓扑相(如 Haldane 相)时,字符串序参量(SOP)提供了一种方法来识别这些相。字符串序参量的定义通常涉及多个远离的站点之间的长程关联,通常具有如下形式:Zi,Xk,Zj是泡利矩阵(Pauli operators)。指数项 eiπ∑k=ijXk表示一个相位因子。这意味着我们要计算两个远离站点 i,j 的Z 分量的关联,同时考虑它们之间的X 作用。这个非局域的字符串序参量可以用来检测对称保护拓扑(SPT)相。 阅读详情

在这里插入图片描述

水果放进篮子的问题,

fruits数组里面的数字是每个水果的类型,当前位置对应一个水果。

只有2个篮子,每个篮子只能放一种水果,不能几种水果混放,不限制每个篮子放的水果个数。

从左到右遍历数组,可以选择一个开始的index, 从这个index开始,每经历一个数字,都要把该数字类型的水果放进篮子里,那水果不是不能几种类型混着放么,要是和篮子里面的水果类型不匹配怎么办,那就到此为止,结束。

统计两个篮子里最多能放多少个水果。

思路:

方法1: DP

因为只有2个篮子,降低了复杂度,两个篮子就对应前面出现的2种类型(2个数字)。
因为只有2个数字,当无法再继续放的时候(当前数字和前面2个数字不匹配),更新之前放的水果的最大值,然后从头开始(保留前面的一个数字和当前数字,前面第1个数字抛弃)。

这样说可能一头雾水,举个例子吧,
pr1, pr2表示保存的当前两个篮子里面放的类型。
dp表示到当前index时2个篮子里的水果数。
prCnt表示当前index-1处的数字连续出现的个数。这是为了统计当index处的水果和2个篮子里的水果不匹配时,需要从index-1处重新开始放,而index-1处的数字已经连续出现了多少次(前面一种类型的水果已经放了多少个)。

fruits: 3  3  3  1  2  1  1  2  3  3  4
dp:     1  2  3  4  2  3  4  5  2  3  3
pr1:    3  3  3  3  1  2  2  1  2  2  3
pr2:   -1 -1 -1  1  2  1  1  2  3  3  4
prCnt:  1  2  3  1  1  1  2  1  1  2  1
res:    1  2  3  4  4  4  4  5  5  5  5

所以,看明白了吗。刚开始的时候只有pr1=fruits[0], pr2=-1,
dp[0] = 1, 因为这时候只有一个水果,
到第2个的时候,还是3,跟pr1一样,所以pr2还是-1,
prCnt是它前面一个数字3出现的次数,只出现了一次,所以是1,
因为3和pr1相同,所以dp[1] = dp[0] + 1,

第3个3和上面一样,来看看第4个数字1,
它既不等于pr1, 也不等于pr2, 而现在只有pr1有值,pr2还是-1,所以更新pr2=1,
现在它和pr1或pr2相等了,所以dp[3] = dp[2] + 1 = 4,
这是和pr1或pr2相等的情况。

那么再看和pr1和pr2都不相等的情况,第5个数字2,
因为它和前两个篮子的水果都不匹配,所以要放弃类型为3的水果,
取它的前一个类型2,从2开始,
那么2已经连续出现了几次呢,就是prCnt=1
这是dp[4] = prCnt + 1 = 2.

第6个数字1来的时候,它和pr1相等,dp[5] = dp[4] + 1,
但是我们要保证pr1和pr2的顺序(不然可能新出现的数字被放弃了),1现在是最新出现的,应该保存在pr2,
所以把pr1和pr2交换一下顺序。

    public int totalFruit(int[] fruits) {
        int n = fruits.length;
        int res = 1;
        int pr1 = fruits[0], pr2 = -1;
        int[] dp = new int[n];
        int prCnt = 1;

        dp[0] = 1;
        if(n > 1) {
            dp[1] = 2; 
            res = 2; 
            if(fruits[1] != pr1) {
                pr2 = fruits[1];
            } else {
                prCnt = 2;
            }
        }

        for(int i = 2; i < n; i++) {
            if(pr2 == -1 && fruits[i] != pr1) {
                pr2 = fruits[i];
            }
           
            if(fruits[i] == pr1 || fruits[i] == pr2) {
                if(fruits[i] == pr1) {
                    int tmp = pr1;
                    pr1 = pr2;
                    pr2 = tmp;
                }
                if(fruits[i] == fruits[i-1]) prCnt ++;
                else prCnt = 1;
                dp[i] = dp[i-1] + 1;             
            } else {
                dp[i] = prCnt + 1;
                prCnt = 1;
                pr1 = pr2;
                pr2 = fruits[i];
            }

           
            res = Math.max(res, dp[i]);
        }
       
        return res;
    }

方法2: 双指针

上面的DP方法需要统计前一个数字出现的次数prCnt,也可以用双指针记录前一个数字出现的起点和终点,用终点减去起点就是前一个数字出现的次数。
其他的都差不多。

    public int totalFruit(int[] fruits) {
        if (fruits.length == 1) {
            return 1;
        }
        int left = 0;
        int res = 0;
        int[] currFr = new int[]{fruits[0], -1};
        for (int right = 1; right < fruits.length; ++right) {
            int fr = fruits[right];
            if (fr != currFr[0] && fr != currFr[1]) {
                if (currFr[1] == -1) {
                    currFr[1] = fr;
                    continue;
                }
                //统计前一个数字出现的次数
                res = Math.max(res, right - left);
                //更新新的前一个数字起点和终点指针
                int prevFr = fruits[right - 1];
                left = right - 1;
                while (fruits[left - 1] == prevFr) {
                    left--;
                }
                //更新最新的2个数字
                currFr[0] = prevFr;
                currFr[1] = fr;
            }
        }
        return Math.max(fruits.length - left, res);
    }
BLE透传速率调优(二) 摘要:本文分析了蓝牙协议中MDbit=1时应连续发送多包但实际只发一包的问题。通过波形分析和代码调试,发现问题的根源在于接收端出现sync error导致提前关闭接收窗口,而非发送端问题。最终通过调整RF时序参数(将rxpathdly改为13us)解决了TX到RX转换的同步问题,使连接事件能正常发送多个数据包,传输速率提升至70kb/s。文中详细记录了使用逻辑分析仪和trace宏调试的过程,揭示了CEVA芯片设计中TX中断与ACK接收的关联特性。 阅读详情

相关推荐

ArcGIS+PLUS+InVEST三件套实战:从零搞定土地利用变化与碳储量预测(附完整数据包)

本文详细介绍了如何整合ArcGIS、PLUS模型和InVEST模型,构建土地利用变化与碳储量预测的完整研究流水线。通过多情景模拟和生态系统服务评估,提供从数据准备到结果验证的实战指南,助力研究者高效完成生态评估项目。

weixin_30399821的博客 545

滑动窗口(二)——leetcode No. 904. Fruit Into Baskets(篮子放水果)

题目: In a row of trees, the i-th tree produces fruit with type tree[i]. You start at any tree of your choice, then repeatedly perform the following steps: Add one piece of fruit from this tree to your...

一条菜狗的博客 465

遥感目标检测数据集汇总

文章目录1. 光学数据集1.1 DIOR1.2 LEVIR1.3 DOTA1.4 RSOD1.5 NWPU VHR-101.6 VEDAI1.7 COWC1.8 ITCVD1.9 DIUx xView 20181.10 HRSC20161.11 TAS1.12 SZTAKI‐INRIA1.13 UCAS AOD1.14 DLR 3K Vehicle2. SAR2.1 SSDD2.2 SSDD+2....

quanwei的博客 6万+

水果成篮

在一排树中,第 i 棵树产生 tree[i] 型的水果。 你可以从你选择的任何树开始,然后重复执行以下步骤: 把这棵树上的水果放进你的篮子里。如果你做不到,就停下来。 移动到当前树右侧的下一棵树。如果右边没有树,就停下来。 请注意,在选择一颗树后,你没有任何选择:你必须执行步骤 1,然后执行步骤 2,然后返回步骤 1,然后执行步骤 2,依此类推,直至停止。 你有两个篮子,每个篮子可以携带任何...

氦氖氩氪氙 491

GEE实战:基于Modis NPP数据的全球植被生产力动态监测与分析

本文详细介绍了如何利用Google Earth Engine(GEE)平台和Modis NPP数据,进行全球植被生产力的动态监测与分析。通过实战代码演示,涵盖数据加载、区域统计、年际趋势计算及空间制图等核心步骤,为生态评估与气候变化研究提供了一套高效的数据分析解决方案。

weixin_29197699的博客 550

量化交易——量化选股(多因子选股)

就是用过去的股票的收益率对多因子进行回归,得到一个回归方程,然后再把最新的因子值代入回归方程得到一个对未来股票收益的预判,然后再以此为依据进行选股。的方法是建立在市场无效或弱有效的前提之下,随着使用多因子选股模型的投资者数量的不断增加,有的因子会逐渐失效,而。就是根据各个因子的大小对股票进行打分,然后按照一定的权重加权得到一个总分,根据总分再对股票进行筛选。另一方面,一些因子可能在过去的市场环境下比较有效,而随着市场风格的改变,这些。波动的影响,避免在市场极度狂热或悲观的情况下作出非理性的。

jiucaixiuyang的博客 1792

L48.【LeetCode题解】904. 水果成篮

你正在探访一家农场,农场从左到右种植了一排果树。这些树用一个整数数组fruits表示,其中fruits[i]是第i棵树上的水果。你想要尽可能多地收集水果。给你一个整数数组fruits,返回你可以收集的水果的数目。fruits = [3可以采摘全部 3 棵树。3可以采摘 [1,2,2] 这三棵树。如果从第一棵树开始采摘,则只能采摘 [0,1] 这两棵树。4可以采摘 [2,3,2,2] 这四棵树。如果从第一棵树开始采摘,则只能采摘 [1,2] 这两棵树。,3,3,4]5。

zhangcoder的博客 记录学习轨迹~ 1492

WordPress MasterStudy LMS插件 SQL注入漏洞复现(CVE-2024-1512)

WordPress Plugin MasterStudy LMS 3.2.5 版本及之前版本存在安全漏洞,该漏洞源于对用户提供的参数转义不足,导致可以通过 /lms/stm-lms/order/items REST 路由的 user 参数进行基于联合的 SQL 注入。

0xSec 1449

904. Fruit Into Baskets

904. Fruit Into Baskets方法1: sliding window In a row of trees, the i-th tree produces fruit with type tree[i]. You start at any tree of your choice, then repeatedly perform the following steps: Add one...

wilzxu的博客 176

YOLO11训练中的批量大小(Batch Size)选择策略:分析Batch Size对训练速度、显存占用和模型性能的影响

在深度学习训练过程中,Batch Size(批量大小)是一个至关重要的超参数,它指的是单次迭代中用于更新模型权重的样本数量。简单来说,当我们训练神经网络时,不会一次性将所有数据喂给模型,而是将数据分成若干个小批次(batch),每个批次包含一定数量的样本,这个数量就是Batch Size。 Batch Size的核心作用在于平衡训练效率与模型性能。较小的Batch Size意味着每次更新权重时参考的信息较少,可能导致训练过程更加随机,但有时能带来更好的泛化能力;较大的Batch Size则能提供更稳定的梯

本博客聚焦 YOLOv11 全流程落地,涵盖架构优化、数据集处理、训练技巧与多场景部署,兼及国产数据库、Java 开发与 AI 模型应用,内容兼顾理论与工程实践,为开发者提供系统干货,助力高效提升技术能力。 326

Trae的付费之路还挺艰难,茫茫多的人想付付不了(附解决办法)

不得不说,Trae国际版这个付费其实整的挺复杂的,但没办法,毕竟有政策限制,付费成功后,你就是尊贵的Pro用户啦,使用Claude 4不排队还是挺爽的,而且600次其实不算少了,有一个小技巧,简单的问题就把模型切到Gemini-2.5-flag,因为使用这个模型是没有次数限制的。其次付费的时候有个ZIP Code,这东西也是个迷之存在,有的地区节点需要填,有的不需要,如果你选到了不需要填的节点,那很好,付费就行了,如果需要填,可以填一个51800试试。

cpp加油站的专栏 5883

leetocde 904. Fruit Into Baskets

In a row of trees, the i-th tree produces fruit with type tree[i]. You start at any tree of your choice, then repeatedly perform the following steps: Add one piece of fruit from this tree to your ba...

突破吧!次元壁 681

大模型自我认知微调的实战教程

本文主要介绍了大模型自我认知微调的实战教程,希望对学习大语言模型的同学们有所帮助。微调成功并保留原有能力的截图如下所示: 文章目录 1. 前言 2. 配置环境 2.1 安装虚拟环境 2.2 安装依赖库 3. 实战代码 3.1 配置数据集 3.2 lora微调

herosunly的博客 4万+

LeetCode //C - 904. Fruit Into Baskets

Problem: Given an array representing fruits on trees, collect the maximum number of fruits using two baskets, each holding only one type of fruit. Starting from any tree, you pick one fruit from each subsequent tree until encountering a fruit type not in y

Made in Code 1829

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

LeetCode | 904. 水果成篮 ( Fruit into Baskets)

摘要: 题目要求在最多采摘两种水果种类的限制下,从一排果树中找出能连续采摘的最长子数组。解题采用滑动窗口法:维护一个双指针窗口,用字典记录当前水果种类及数量。右指针扩展窗口,当种类超过2时,左指针收缩窗口直到恢复两种水果,同时更新最大采摘数。算法时间复杂度O(n),空间复杂度O(1)。示例解析展示了不同输入的最优采摘策略。

Lynn0_Y的博客 1095

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

[Swift]LeetCode904. 水果成篮 | Fruit Into Baskets

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs.com/strengthen/)➤GitHub地址:https://github.com/strengthen/LeetCode➤原文地址:https://www.cnblogs.com/stren...

weixin_30687587的博客 147

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

【Leetcode】904.Fruit Into Baskets

【LeetCode】904. Fruit Into Baskets 移动滑窗

weixin_51396924的博客 295

【LeetCode】904. Fruit Into Baskets

In a row of trees, the i-th tree produces fruit with type tree[i]. You start at any tree of your choice, then repeatedly perform the following steps: Add one piece of fruit from this tree to your b...

天行健,君子以自强不息 286

LeetCode 904. 水果成篮【fruit-into-baskets】

904. 水果成篮 题目详情 题目传送门:904. 水果成篮 在一排树中,第 i 棵树产生 tree[i] 型的水果。 你可以从你选择的任何树开始,然后重复执行以下步骤: 把这棵树上的水果放进你的篮子里。如果你做不到,就停下来。 移动到当前树右侧的下一棵树。如果右边没有树,就停下来。 请注意,在选择一颗树后,你没有任何选择:你必须执行步骤 1,然后执行步骤 2,然后返回步骤 1,然后执行步骤 2,依此类推,直至停止。 你有两个篮子,每个篮子可以携带任何数量的水果,但你希望每个篮子只携带一种类型的水果。

鸪鹑菌的个人博客 318

Leetcode - 904. Fruit Into Baskets

题目 In a row of trees, the i-th tree produces fruit with type tree[i]. You start at any tree of your choice, then repeatedly perform the following steps: Add one piece of fruit from this tree to your b...

weixin_39354676的博客 210

Leetcode904 Fruit Into Baskets

https://leetcode.com/problems/fruit-into-baskets/ 选取最大长度的子数组,只包含两种值。 做法:双指针 public int totalFruit(int[] tree) { int[] cnt = new int[40010]; int l = 0; int type...

dezhonger的专栏 169

LeetCode #904 - Fruit Into Baskets

题目描述: In a row of trees, the i-th tree produces fruit with type tree[i]. You start at any tree of your choice, then repeatedly perform the following steps: 1. Add one piece of fruit from this tree ...

LawFile的博客 211

LeetCode 904. Fruit Into Baskets

原题链接在这里: 题目: In a row of trees, thei-th treeproducesfruit with typetree[i]. Youstart at any treeof your choice, then repeatedly perform the following steps: Add one piece of fruit fro...

weixin_30650859的博客 102

leetcode 904. Fruit Into Baskets[map维护滑动窗口]

https://leetcode.com/problems/fruit-into-baskets/ In a row of trees, thei-th treeproducesfruit with typetree[i]. Youstart at any treeof your choice, then repeatedly perform the following steps...

MissZhou要努力 233

LeetCode:904. Fruit Into Baskets

LeetCode:904. Fruit Into Baskets 题目描述 In a row of trees, the i-th tree produces fruit with type tree[i]. You start at any tree of your choice, then repeatedly perform the following steps: Add one ...

杨领well的专栏 982

LeetCode:904. Fruit Into Baskets - Python

问题描述: 904. 水果成篮 在一排树中,第i棵树产生tree[i]型的水果。 你可以从你选择的任何树开始,然后重复执行以下步骤: 把这棵树上的水果放进你的篮子里。如果你做不到,就停下来。 移动到当前树右侧的下一棵树。如果右边没有树,就停下来。 请注意,在选择一颗树后,你没有任何选择:你必须执行步骤 1,然后执行步骤 2,然后返回步骤 1,然后执行步骤 2,依此类推,直至停止。 你有两个篮...

Growth Diary 2658
上一篇: leetcode 1470. Shuffle the Array(打乱数组)
下一篇: leetcode 2306. Naming a Company(命名公司)
蓝羽飞鸟
博客等级 码龄8年 1万+粉丝 727原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

打赏作者

蓝羽飞鸟

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

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

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

打赏作者

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

抵扣说明:

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

余额充值