题目描述:

你正在探访一家农场,农场从左到右种植了一排果树。这些树用一个整数数组 fruits 表示,其中 fruits[i] 是第 i 棵树上的水果 种类 。

你想要尽可能多地收集水果。然而,农场的主人设定了一些严格的规矩,你必须按照要求采摘水果:

你只有 两个 篮子,并且每个篮子只能装 单一类型 的水果。每个篮子能够装的水果总量没有限制。
你可以选择任意一棵树开始采摘,你必须从 每棵 树(包括开始采摘的树)上 恰好摘一个水果 。采摘的水果应当符合篮子中的水果类型。每采摘一次,你将会向右移动到下一棵树,并继续采摘。
一旦你走到某棵树前,但水果不符合篮子的水果类型,那么就必须停止采摘。
给你一个整数数组 fruits ,返回你可以收集的水果的 最大 数目。

level AC rate
Medium 44.2%

题目解析:

一开始我一看到这道题,心想这不贪心嘛,但是发现贪心考虑的条件太多了,首先它同一种水果的下标不一定是连续的,然后两种水果的下标合并一定要是连续的,看了一眼讨论区,直接找包含两种水果的最长连续子序列即可,使用了一个hashset来进行去重,不断往里存值,直到计算到最后一棵树或者hashset的长度等于3,则计算最大值结果即可,代码如下:

class Solution {
public:int totalFruit(vector<int>& fruits) {unordered_set<int> uset;int res = 0;for(int i = 0 ; i<fruits.size() ; i++){if(i>0&&fruits[i]==fruits[i-1])continue;for(int j = i ; j<fruits.size() ; j++){uset.emplace(fruits[j]);if(uset.size()==3){res = max(res,j-i);uset.clear();break;}if(j==(fruits.size()-1)){res = max(res,j-i+1);return res;}}}return res;}
};

执行用时:640 ms, 在所有 C++ 提交中击败了5.64%的用户

内存消耗:179.2 MB, 在所有 C++ 提交中击败了5.05%的用户

两个嵌套的for循环,性能实在太差了,该用hashmap来进行存储计算,代码如下:

class Solution {
public:int totalFruit(vector<int>& fruits) {unordered_map<int,int> umap;int res = 0;int right = 0;int left = 0;for(; right<fruits.size() ; right++){umap[fruits[right]]++;while(umap.size()==3){auto it = umap.find(fruits[left]);it->second--;if(it->second==0)umap.erase(it);left++;}res = max(res,right-left+1);}return res;}
};

执行用时:124 ms, 在所有 C++ 提交中击败了56.15%的用户

内存消耗:69.4 MB, 在所有 C++ 提交中击败了42.28%的用户

第904题 水果成篮相关推荐

  1. Leetcode每日一题:904.fruit-into-baskets(水果成篮)

    思路:这道题的本质就是在一个数组中,找到这么一个子数组,使得这个子数组只有两个不同的数值,并且子数组的长度达到最大:用暴力的解法肯定会超时,这里沿用了KMP的字符串匹配方法: 语文能力有限,无法将整个 ...

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

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

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

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

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

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

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

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

  6. leetcode:904. 水果成篮

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

  7. LeetCode 904. 水果成篮

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

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

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

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

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

最新文章

  1. 推荐5款实用的jQuery时间轴插件
  2. 两所顶尖大学,签约落地深圳!
  3. 《剑指offer》分解让复杂问题更简单
  4. 【学亮说】Java实现单例模式的8种方式(你真的搞懂单例模式了吗?)
  5. 埃罗芒阿老师计算机谱,[B型]ヒトリゴト-埃罗芒阿老师OP 完整版
  6. php 留言板分页显示,php有分页的留言板,留言成功后怎么返回当前页?
  7. 嵌入式Linux系统编程学习之十四signal信号处理机制
  8. webgl babylonjs 优化
  9. HTML5 file对象和blob对象的互相转换
  10. Python-科比投篮预测
  11. 华为路由器与交换机常用命令(20200618)
  12. #pragma clang diagnostic ignored 忽略警告
  13. 基于Vue3+Go本地视频管理与播放系统设计与实现
  14. 重金属深度处理,低浓度镍离子去除技术
  15. 【2017.10.08 智能驾驶/汽车电子】汽车电控常用英文缩写及功能之一
  16. 新海诚画集[秒速5センチメートル:樱花抄·學舍]...
  17. svn安装完成check后无法commit错误信息,及相应的解决办法
  18. 地籍管理 : 宗地数据处理的一般步骤
  19. 前端基础-HTML基础篇(一)
  20. 【蓝桥杯】单片机精确延时——软件延时

热门文章

  1. Xcode7报App Transport Security has blocked a cleartext HTTP (http://) resource load since it is insec
  2. PTA 3+2转段考试 数据库 mysql(3篇)
  3. JavaScript(js)的多次弹窗
  4. MySQL 中出现的字符编码错误 Incorrect string value: ‘\x\x\x\x‘ for column ‘x‘
  5. [编程基础] Python命令行解析库argparse学习笔记
  6. python中斐波那契系数实现的几种方法
  7. 读书笔记, Python - python-tricks-buffet-awesome-features
  8. 从当前日期,获取下一年的日期
  9. Java 数字转字符串并指定位数,位数不足,自动补零
  10. zigzag convert