leetcode:904. 水果成篮
题目来源
- 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. 水果成篮相关推荐
- LeetCode 904. 水果成篮
904. 水果成篮 题目:你正在探访一家农场,农场从左到右种植了一排果树.这些树用一个整数数组 fruits 表示,其中 fruits[i] 是第 i 棵树上的水果 种类 . 你想要尽可能多地收集水果 ...
- LeetCode 904. 水果成篮【fruit-into-baskets】
904. 水果成篮 题目详情 题目传送门:904. 水果成篮 在一排树中,第 i 棵树产生 tree[i] 型的水果. 你可以从你选择的任何树开始,然后重复执行以下步骤: 把这棵树上的水果放进你的篮子 ...
- 力扣(LeetCode)904. 水果成篮(C语言)
一.环境说明 本文是 LeetCode 904题 : 水果成篮,使用c语言实现 滑动窗口+哈希集合. 测试环境:Visual Studio 2019 二.代码展示 //滑动窗口+哈希表,一次遍历O(n ...
- LeetCode 904. 水果成篮(滑动窗口)
1. 题目 在一排树中,第 i 棵树产生 tree[i] 型的水果. 你可以从你选择的任何树开始,然后重复执行以下步骤: 把这棵树上的水果放进你的篮子里.如果你做不到,就停下来. 移动到当前树右侧的下 ...
- leetcode 904:水果成篮(滑动窗口)
一:题目 二:思路 1.用两个篮子装进两个数,后面只能装入这两个相同的数,并统计个数;如果遇到其他数,则重新开始计数, 这里的重新开始计数指的是在去除第一个篮子中所装进的数 2.滑动窗口来做 滑动窗口 ...
- 2022-7-8 Leetcode 904.水果成篮
错误的代码: class Solution {public:int totalFruit(vector<int>& fruits) {int start = 0;int end = ...
- LeetCode每日一题——904. 水果成篮
LeetCode每日一题系列 题目:904. 水果成篮 难度:普通 文章目录 LeetCode每日一题系列 题目 示例 思路 题解 题目 你正在探访一家农场,农场从左到右种植了一排果树.这些树用一个整 ...
- leetcode 题解 904.水果成篮(Typescript)
/* * @lc app=leetcode.cn id=904 lang=typescript * * [904] 水果成篮(实质为求最大两元素连续子串) */ //滑动窗口 // @lc code= ...
- 【042】904. 水果成篮[滑动窗口]
你正在探访一家农场,农场从左到右种植了一排果树.这些树用一个整数数组 fruits 表示,其中 fruits[i] 是第 i 棵树上的水果 种类 . 你想要尽可能多地收集水果.然而,农场的主人设定了一 ...
最新文章
- Myeclipse 2015 stable 2.0 完美破解方法
- 《Java程序设计》第五周学习总结
- QT的QScopedPointer类的使用
- 在Hi3531上运行QT
- 与时俱进:在JAX-RS API中采用OpenAPI v3.0.0
- 数据结构——线性表的C语言实现
- 洞察SaaS:中国SaaS的前世今生
- nikon n150在电脑中不显示里面的图片的解决方法
- IIFP之牛刀小试(初识篇)
- Redis事务和秒杀业务设计
- 道客巴巴 解析_华为2019数字芯片岗笔试解析(多选部分)
- it专员职责_【IT专员工作内容|工作职责|IT专员做什么】-看准网
- centos修改键盘布局
- python二手房价格预测_用python对2019年二手房价格进行数据分析
- 设计模式详解:Singleton(单例类)
- epsfallback_5G语音回落4G解决方案探讨
- Google OAUTH + OpenID 给第三方授权
- 王清:从北京地铁降价看公共产品属性回归
- android 动画循环移动图片
- R count函数_R语言系列第二期:R变量、脚本、作图等模块介绍