题目来源

  • leetcode:904. 水果成篮

题目描述

题目解析

题意

题意从任意位置开始,若最多只能收集两种水果,问最多能收集多少个水果。

这道题目可以理解为求只包含两种元素的最长连续子序列,和leetcode:159.最多有两个不同字符的最长子串几乎一摸一样。唯一不同的是这里是用数字表示不同的种类

实现

思路和159题也一样,用滑动窗口求解。求最长滑动窗口长度

用一个map,key为字符,value为字符出现次数。

class Solution {public:int totalFruit(vector<int>& tree) {int res = 0, start = 0, n = tree.size();unordered_map<int, int> fruitCnt;for (int i = 0; i < n; ++i) {++fruitCnt[tree[i]];while (fruitCnt.size() > 2) {if (--fruitCnt[tree[start]] == 0) {fruitCnt.erase(tree[start]);}++start;}res = max(res, i - start + 1);}return res;}
};

用一个map,key为字符,value为字符最新的坐标

class Solution {public:int totalFruit(vector<int>& tree) {int res = 0, start = 0, n = tree.size();std::unordered_map<int, int> fruitPos;for (int i = 0; i < n; ++i) {fruitPos[tree[i]] = i;while (fruitPos.size() > 2){if(fruitPos[tree[start]] == start){fruitPos.erase(tree[start]);}start++;}res = std::max(res, i - start + 1);}return res;}
};
class Solution {public:int totalFruit(vector<int>& fruits) {int i = 0; //滑动窗口左边界int sub_len = 0; //子序列长度int fruit_counter = 0; //篮子中的水果种类数int len = fruits.size();std::unordered_map<int, int> basket;//创建篮子for (int j = 0; j < len; ++j) {if(basket[fruits[j]] == 0){fruit_counter++;}basket[fruits[j]]++;//如果篮子中的水果数目超过两种,则需要移动左边界,对应从子序列中删去水果的value要减一for (; fruit_counter > 2; ++i) {basket[fruits[i]]--;//若对应水果key的value变为0,说明篮子里已经没有这种水果了,水果种类要对应变化if (basket[fruits[i]] == 0) {fruit_counter--;}}//在第二个for循环结束后,篮子中的水果一定满足题意要求,此时更新子序列长度sub_len = max(sub_len, j - i + 1);}return sub_len;}
};

类似题目

题目 思路
leetcode:159.最多有两个不同字符的最长子串 滑动窗口
leetcode:904. 水果成篮 滑动窗口
leetcode:76. 最小子串:字符串s2覆盖s1的所有子串的最小子串 Minimum Window Substring 哈希

leetcode:904. 水果成篮相关推荐

  1. LeetCode 904. 水果成篮

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

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

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

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

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

  4. LeetCode 904. 水果成篮(滑动窗口)

    1. 题目 在一排树中,第 i 棵树产生 tree[i] 型的水果. 你可以从你选择的任何树开始,然后重复执行以下步骤: 把这棵树上的水果放进你的篮子里.如果你做不到,就停下来. 移动到当前树右侧的下 ...

  5. leetcode 904:水果成篮(滑动窗口)

    一:题目 二:思路 1.用两个篮子装进两个数,后面只能装入这两个相同的数,并统计个数;如果遇到其他数,则重新开始计数, 这里的重新开始计数指的是在去除第一个篮子中所装进的数 2.滑动窗口来做 滑动窗口 ...

  6. 2022-7-8 Leetcode 904.水果成篮

    错误的代码: class Solution {public:int totalFruit(vector<int>& fruits) {int start = 0;int end = ...

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

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

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

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

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

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

最新文章

  1. Myeclipse 2015 stable 2.0 完美破解方法
  2. 《Java程序设计》第五周学习总结
  3. QT的QScopedPointer类的使用
  4. 在Hi3531上运行QT
  5. 与时俱进:在JAX-RS API中采用OpenAPI v3.0.0
  6. 数据结构——线性表的C语言实现
  7. 洞察SaaS:中国SaaS的前世今生
  8. nikon n150在电脑中不显示里面的图片的解决方法
  9. IIFP之牛刀小试(初识篇)
  10. Redis事务和秒杀业务设计
  11. 道客巴巴 解析_华为2019数字芯片岗笔试解析(多选部分)
  12. it专员职责_【IT专员工作内容|工作职责|IT专员做什么】-看准网
  13. centos修改键盘布局
  14. python二手房价格预测_用python对2019年二手房价格进行数据分析
  15. 设计模式详解:Singleton(单例类)
  16. epsfallback_5G语音回落4G解决方案探讨
  17. Google OAUTH + OpenID 给第三方授权
  18. 王清:从北京地铁降价看公共产品属性回归
  19. android 动画循环移动图片
  20. R count函数_R语言系列第二期:R变量、脚本、作图等模块介绍

热门文章

  1. gstreamer简介
  2. 基于强化学习SAC_LSTM算法的机器人导航
  3. ngrok穿透服务器搭建
  4. 有源滤波器——APF
  5. C语言中带负数的除法
  6. 哪位有利用matlab中的s函数编写的光伏系统mppt仿真程序,Simulink的MPPT的S函数程序...
  7. 冬令营第四天(1.21)
  8. 【数据通信】具有路由 WSN 模拟器的随机方式移动(Matlab代码实现)
  9. 最实惠又容易上手的STM32的学习板,你确定不了解一下吗
  10. xiandian云计算平台IAAS图文篇-controller节点