力扣904-水果成篮(C++,总结别人的思路)
对比我的错误代码,有几个问题值得思考:
快慢指针一开始是必须差一还是可以相等?如果可以相等又为什么能相等?
这个题我没有考虑相等,就默认一开始两个数字不一样了,但是实际上按题意 fast对应的果树也可能是slow对应的果树,没有考虑实际问题,这也导致判断新树种的时候判断条件只考虑了fast对应的total[1],没有考虑slow对应的果树。
双指针就必须是slow++吗?slow还可以怎么移动?为什么能那么移动?
这个题是slow=fast-1,直接把slow移到一个很靠后的位置,然后再--,边界判断是亮点,判断条件也用的是slow-1(用的好!)而不是slow,这样就避免了--之后不等的情况,前一个满足条件的时候才--,而不是现在满足条件的时候--。
这个题解的亮点还在于充分利用“连续”的要求,一旦发现新树种就先保存一个原来的最大值之后就同时更新total数组,slow=fast-1的设定也考虑到了slow=原fast的情况。
最后return的时候也max了一下,因为最后fast++了。
正确代码:
class Solution {
public:int totalFruit(vector<int>& fruits) {int total[2]={fruits[0], fruits[0]};int fast=0,slow=0;int len=0;while(fast<fruits.size()){if(fruits[fast]!=total[0] && fruits[fast]!=total[1]){len=max(fast-slow, len);slow=fast-1;total[0]=fruits[slow];total[1]=fruits[fast];while(slow>=1 && fruits[slow-1]==total[0])slow--;}len=max(fast-slow, len);fast++;}return max(fast-slow, len);}
};
力扣904-水果成篮(C++,总结别人的思路)相关推荐
- 力扣904,水果成篮(JavaScript)
通过map()保存数据,(key:当前值,value:下标)把相同的值存在一起 var totalFruit = function(fruits) {const map=new Map()let l= ...
- LeetCode 904. 水果成篮
904. 水果成篮 题目:你正在探访一家农场,农场从左到右种植了一排果树.这些树用一个整数数组 fruits 表示,其中 fruits[i] 是第 i 棵树上的水果 种类 . 你想要尽可能多地收集水果 ...
- 904. 水果成篮(数组、滑动窗口)
904. 水果成篮(数组.滑动窗口) 考察点: 数组.滑动窗口 水果成篮 你正在探访一家农场,农场从左到右种植了一排果树.这些树用一个整数数组 fruits 表示,其中 fruits[i] 是第 i ...
- C++:Leetcode-滑动窗口-904.水果成篮
C++:Leetcode-滑动窗口-904水果成篮 重点掌握滑动窗口思想,左指针和右指针分别代表的含义 重点掌握熟悉利用哈希表进行统计和查重. 面对这种同类型数量统计问题或者是查重问题,哈希表是不二之 ...
- LeetCode每日一题——904. 水果成篮
LeetCode每日一题系列 题目:904. 水果成篮 难度:普通 文章目录 LeetCode每日一题系列 题目 示例 思路 题解 题目 你正在探访一家农场,农场从左到右种植了一排果树.这些树用一个整 ...
- 【042】904. 水果成篮[滑动窗口]
你正在探访一家农场,农场从左到右种植了一排果树.这些树用一个整数数组 fruits 表示,其中 fruits[i] 是第 i 棵树上的水果 种类 . 你想要尽可能多地收集水果.然而,农场的主人设定了一 ...
- leetcode 题解 904.水果成篮(Typescript)
/* * @lc app=leetcode.cn id=904 lang=typescript * * [904] 水果成篮(实质为求最大两元素连续子串) */ //滑动窗口 // @lc code= ...
- leetcode:904. 水果成篮
题目来源 leetcode:904. 水果成篮 题目描述 题目解析 题意 题意从任意位置开始,若最多只能收集两种水果,问最多能收集多少个水果. 这道题目可以理解为求只包含两种元素的最长连续子序列,和l ...
- LeetCode 904. 水果成篮【fruit-into-baskets】
904. 水果成篮 题目详情 题目传送门:904. 水果成篮 在一排树中,第 i 棵树产生 tree[i] 型的水果. 你可以从你选择的任何树开始,然后重复执行以下步骤: 把这棵树上的水果放进你的篮子 ...
- 力扣(LeetCode)904. 水果成篮(C语言)
一.环境说明 本文是 LeetCode 904题 : 水果成篮,使用c语言实现 滑动窗口+哈希集合. 测试环境:Visual Studio 2019 二.代码展示 //滑动窗口+哈希表,一次遍历O(n ...
最新文章
- Tensorflow安装问题: Could not find a version that satisfies the requirement tensorflow pip命令...
- Softmax和Cross-entropy是什么关系?
- python使用kafka原理详解真实完整版_转:Kafka史上最详细原理总结 ----看完绝对不后悔...
- each,collect map collect! map!
- 【转】未能加载文件或程序集或它的某一个依赖项,系统找不到指定的文件
- 编译 / __attribute__(constructor)和__attribute__(destructor)
- Ubuntu20.04下面运行applet与freemind部署到web上(调研+找到替换方案)
- 从mysql到大数据(一)--开宗明义
- 得推乡镇拼车系统源码v1.0
- oracle12c ora 12545,11gR2 ORA-12545故障处理
- escape character.
- 游戏设计规则探秘之提高动词的健壮性
- Imagick 处理gif psd格式
- stl空间配置器alloc
- android service开启前台通知
- mysql netbeans_关于netbeans与mysql连接问题
- lora_pkt_fwd.c代码解读
- 手机OTG 我的世界_别再给手机外接OTG键鼠玩刺激战场了:其实还能这样操作
- 参赛【GGJ2022】回顾,作品--双生共合
- 面试SEO岗位时会问的问题有哪些?SEO面试官提问