潍坊专业做网站的公司,网站建设灰色关键词,软件开发公司好的有哪些,上海百度地图题目链接#xff1a;**. - 力扣#xff08;LeetCode#xff09;**
题目描述#xff1a;
你正在探访一家农场#xff0c;农场从左到右种植了一排果树。这些树用一个整数数组 fruits 表示#xff0c;其中 fruits[i] 是第 i 棵树上的水果 种类 。
你想要尽可能多地收集水…题目链接**. - 力扣LeetCode**
题目描述
你正在探访一家农场农场从左到右种植了一排果树。这些树用一个整数数组 fruits 表示其中 fruits[i] 是第 i 棵树上的水果 种类 。
你想要尽可能多地收集水果。然而农场的主人设定了一些严格的规矩你必须按照要求采摘水果 * 你只有 两个 篮子并且每个篮子只能装 单一类型 的水果。每个篮子能够装的水果总量没有限制。 * 你可以选择任意一棵树开始采摘你必须从 每棵 树包括开始采摘的树上 恰好摘一个水果 。采摘的水果应当符合篮子中的水果类型。每采摘一次你将会向右移动到下一棵树并继续采摘。 * 一旦你走到某棵树前但水果不符合篮子的水果类型那么就必须停止采摘。
给你一个整数数组 fruits 返回你可以收集的水果的 最大 数目。
示例 1
输入fruits [1,2,1]
输出3
解释可以采摘全部 3 棵树。
示例 2
输入fruits [0,1,2,2]
输出3
解释可以采摘 [1,2,2] 这三棵树。
如果从第一棵树开始采摘则只能采摘 [0,1] 这两棵树。
示例 3
输入fruits [1,2,3,2,2]
输出4
解释可以采摘 [2,3,2,2] 这四棵树。
如果从第一棵树开始采摘则只能采摘 [1,2] 这两棵树。
示例 4
输入fruits [3,3,3,1,2,1,1,2,3,3,4]
输出5
解释可以采摘 [1,2,1,1,2] 这五棵树。提示 1 fruits.length 105 0 fruits[i] fruits.length
解法滑动窗口
算法思路 研究的对象是一段连续的区间可以使用「滑动窗口」思想来解决问题 让滑动窗口满足窗口内水果的种类只有两种。 做法右端水果进入窗口的时候用哈希表统计这个水果的频次。这个水果进来后判断哈希表的大小 如果大小超过 2说明窗口内水果种类超过了两种。那么就从左侧开始依次将水果划出窗口直到哈希表的大小小于等于2然后更新结果 如果没有超过 2说明当前窗口内水果的种类不超过两种直接更新结果ret 算法流程
a.初始化哈希表 hash 来统计窗口内水果的种类和数量
b.初始化变量左右指针 left0right0记录结果的变量 ret0
c.当 right 小于数组大小的时候一直执行下列循环1️⃣ 将当前水果放入哈希表中2️⃣ 判断当前水果进来后哈希表的大小* 如果超过 2:·将左侧元素滑出窗口并且在哈希表中将该元素的频次减一·如果这个元素的频次减一之后变成了 0就把该元素从哈希表中删除·重复上述两个过程直到哈希表中的大小不超过 23️⃣ 更新结果 ret4️⃣ right让下一个元素进入窗口
d.循环结束后ret存的就是最终结果。
C算法代码使用容器
class Solution {
public:int totalFruit(vectorint fruits) {unordered_mapint,int hash;//统计窗口内出现了多少种水果int ret 0;for(int left 0, right 0; right fruits.size(); right){hash[fruits[right]];//进窗口while(hash.size() 2)//判断{//出窗口hash[fruits[left]]--;if(hash[fruits[left]] 0)hash.erase(fruits[left]);left;}ret max(ret ,right - left 1);}return ret;}
};
C算法代码用数组模拟哈希表
class Solution {
public:int totalFruit(vectorint fruits) {int hash[100001] {0};//统计窗口内出现了多少种水果int ret 0;for(int left 0, right 0, kinds 0; right fruits.size(); right){if(hash[fruits[right]] 0) kinds;//维护水果的种类hash[fruits[right]];//进窗口while(kinds 2)//判断{//出窗口hash[fruits[left]]--;if(hash[fruits[left]] 0)kinds--;left;}ret max(ret ,right - left 1);}return ret;}
};