水果成篮:最多两种元素的滑动窗口
本文由旧博客内容整理迁入。原发布日期未提供,页面日期为本次整理日期。
题目
你正在探访一家农场,农场从左到右种植了一排果树。这些树用整数数组 fruits 表示,其中 fruits[i] 是第 i 棵树上的水果种类。
你想尽可能多地收集水果,但需要遵守以下规则:
- 只有两个篮子,每个篮子只能装单一类型的水果,数量不限。
- 可以选择任意一棵树开始采摘,必须从每棵树(包括开始采摘的树)上恰好摘一个水果。
- 每采摘一次,向右移动到下一棵树。
- 一旦水果不符合篮子的水果类型,就必须停止采摘。
给你整数数组 fruits,返回可以收集的水果的最大数目。
示例
示例 1
1 | 输入:fruits = [1,2,1] |
解释:可以采摘全部 3 棵树。
示例 2
1 | 输入:fruits = [0,1,2,2] |
解释:可以采摘 [1,2,2]。如果从第一棵树开始,只能采摘 [0,1]。
示例 3
1 | 输入:fruits = [1,2,3,2,2] |
解释:可以采摘 [2,3,2,2]。如果从第一棵树开始,只能采摘 [1,2]。
示例 4
1 | 输入:fruits = [3,3,3,1,2,1,1,2,3,3,4] |
解释:可以采摘 [1,2,1,1,2]。
解题思路
这个题也是相当简单,见题解就知道怎么做了:用哈希表记录窗口内每种水果的数量,只要种类超过两种,就收缩左端点。
C++ 题解
1 | class Solution { |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Decwoveh的学习周记!
评论
