欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 家装 > 滑动窗口-904.水果成篮-力扣(LeetCode)

滑动窗口-904.水果成篮-力扣(LeetCode)

2025/12/8 4:52:44 来源:https://blog.csdn.net/black_bear_white/article/details/147288537  浏览:    关键词:滑动窗口-904.水果成篮-力扣(LeetCode)

一、题目解析

fruits[i]代表果树的种类,且只有两个篮子,每个篮子只能装单一类型的水果,每个篮子能装的水果总量没有限制,要求返回可以收集的水果最大数。

通过这个示例就可以将问题转化为找出一个最长的子数组的长度,子数组中水果种类不超过两种。

二、算法原理

解法1:暴力枚举+哈希表

通过暴力枚举出所有水果种类不超过两种的所有子数组长度,将水果个数记录在哈希表中,返回最大的水果个数。

解法2:滑动窗口+哈希表

1.left=0,rigth=0;

2.进窗口:把hash的fruits[right]位置的值加1

3.判断:判断hash.size()是否大于2

 出窗口:把hash的fruits[left]位置的值减1,并判断hash[fruits[left]]的值是否为0,为0则erase。

4.更新结果:right-left+1,比较得出最大值

可以根据上面的原理自己实现,链接:904. 水果成篮 - 力扣(LeetCode)

三、代码示例

这里是做了优化的,虽然时间复杂度为O(N),但是哈希表插入数据和删除数据会浪费时间。在观察了数据量在10^5,可以开一个数组记录个数,然后用kinds维护水果种类,进窗口kinds++,在删除时,kinds--,从原来的76ms->4ms。

 

 

 看到最后,如果对您有帮助,请留下一个免费的赞,期待下期再见!

 

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词