对比我的错误代码,有几个问题值得思考:

快慢指针一开始是必须差一还是可以相等?如果可以相等又为什么能相等?

这个题我没有考虑相等,就默认一开始两个数字不一样了,但是实际上按题意 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++,总结别人的思路)相关推荐

  1. 力扣904,水果成篮(JavaScript)

    通过map()保存数据,(key:当前值,value:下标)把相同的值存在一起 var totalFruit = function(fruits) {const map=new Map()let l= ...

  2. LeetCode 904. 水果成篮

    904. 水果成篮 题目:你正在探访一家农场,农场从左到右种植了一排果树.这些树用一个整数数组 fruits 表示,其中 fruits[i] 是第 i 棵树上的水果 种类 . 你想要尽可能多地收集水果 ...

  3. 904. 水果成篮(数组、滑动窗口)

    904. 水果成篮(数组.滑动窗口) 考察点: 数组.滑动窗口 水果成篮 你正在探访一家农场,农场从左到右种植了一排果树.这些树用一个整数数组 fruits 表示,其中 fruits[i] 是第 i ...

  4. C++:Leetcode-滑动窗口-904.水果成篮

    C++:Leetcode-滑动窗口-904水果成篮 重点掌握滑动窗口思想,左指针和右指针分别代表的含义 重点掌握熟悉利用哈希表进行统计和查重. 面对这种同类型数量统计问题或者是查重问题,哈希表是不二之 ...

  5. LeetCode每日一题——904. 水果成篮

    LeetCode每日一题系列 题目:904. 水果成篮 难度:普通 文章目录 LeetCode每日一题系列 题目 示例 思路 题解 题目 你正在探访一家农场,农场从左到右种植了一排果树.这些树用一个整 ...

  6. 【042】904. 水果成篮[滑动窗口]

    你正在探访一家农场,农场从左到右种植了一排果树.这些树用一个整数数组 fruits 表示,其中 fruits[i] 是第 i 棵树上的水果 种类 . 你想要尽可能多地收集水果.然而,农场的主人设定了一 ...

  7. leetcode 题解 904.水果成篮(Typescript)

    /* * @lc app=leetcode.cn id=904 lang=typescript * * [904] 水果成篮(实质为求最大两元素连续子串) */ //滑动窗口 // @lc code= ...

  8. leetcode:904. 水果成篮

    题目来源 leetcode:904. 水果成篮 题目描述 题目解析 题意 题意从任意位置开始,若最多只能收集两种水果,问最多能收集多少个水果. 这道题目可以理解为求只包含两种元素的最长连续子序列,和l ...

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

    904. 水果成篮 题目详情 题目传送门:904. 水果成篮 在一排树中,第 i 棵树产生 tree[i] 型的水果. 你可以从你选择的任何树开始,然后重复执行以下步骤: 把这棵树上的水果放进你的篮子 ...

  10. 力扣(LeetCode)904. 水果成篮(C语言)

    一.环境说明 本文是 LeetCode 904题 : 水果成篮,使用c语言实现 滑动窗口+哈希集合. 测试环境:Visual Studio 2019 二.代码展示 //滑动窗口+哈希表,一次遍历O(n ...

最新文章

  1. Tensorflow安装问题: Could not find a version that satisfies the requirement tensorflow pip命令...
  2. Softmax和Cross-entropy是什么关系?
  3. python使用kafka原理详解真实完整版_转:Kafka史上最详细原理总结 ----看完绝对不后悔...
  4. each,collect map collect! map!
  5. 【转】未能加载文件或程序集或它的某一个依赖项,系统找不到指定的文件
  6. 编译 / __attribute__(constructor)和__attribute__(destructor)
  7. Ubuntu20.04下面运行applet与freemind部署到web上(调研+找到替换方案)
  8. 从mysql到大数据(一)--开宗明义
  9. 得推乡镇拼车系统源码v1.0
  10. oracle12c ora 12545,11gR2 ORA-12545故障处理
  11. escape character.
  12. 游戏设计规则探秘之提高动词的健壮性
  13. Imagick 处理gif psd格式
  14. stl空间配置器alloc
  15. android service开启前台通知
  16. mysql netbeans_关于netbeans与mysql连接问题
  17. lora_pkt_fwd.c代码解读
  18. 手机OTG 我的世界_别再给手机外接OTG键鼠玩刺激战场了:其实还能这样操作
  19. 参赛【GGJ2022】回顾,作品--双生共合
  20. 面试SEO岗位时会问的问题有哪些?SEO面试官提问

热门文章

  1. linux下拨号时间,linux下拨号上网
  2. 集合、set、list、map、所有集合基本知识使用方法总结
  3. python内置函数 exec eval compile
  4. Linux下socket通信和epoll
  5. C# 循环语句 for
  6. 微信支付官方SDK V3 .NET版的坑
  7. 并查集一般高级应用的理解
  8. IOS UI 第三篇:基本UI
  9. JS控制CSS样式语法对照
  10. 微信小程序按钮Button使用详解