【算法专题突破】滑动窗口 - 水果成篮(13)

简介: 【算法专题突破】滑动窗口 - 水果成篮(13)

1. 题目解析

题目链接:904. 水果成篮 - 力扣(Leetcode)

题目有很长一段话,但是我们读一遍题目可以提炼转化出题目的要求 :

其实就是找出一个最长的子数组,且数组内数字的种类不超过两个。

2. 算法原理

这道题题目可以使用滑动窗口来解决,

为什么呢?

我们可以来简单分析一下,

我们通过哈希表维护一个窗口,

让right++进窗口,如果出现了三个种类的水果,就让left++,

left++会有两种情况,

1. 还是有三种水果,那就让left继续++

2. 剩两种水果了,那就记录结果,这个时候重点来了,

right需不需要回到left的位置重新++呢?不需要,这就是滑动窗口的核心,

我们直接让right继续++进窗口即可。

3. 代码编写

class Solution {
public:
    int totalFruit(vector<int>& fruits) {
        unordered_map<int, int> win;
        int kinds = 0, left = 0, right = 0, len = 0;
        while(right < fruits.size()) {
            win[fruits[right++]]++;
            while(left < fruits.size() && win.size() > 2) {
                win[fruits[left++]]--;
                if(win[fruits[left - 1]] == 0) {
                    win.erase(fruits[left - 1]);
                    break;
                }
            }
            len = max(len, right - left);
        }
        return len;
    }
};

写在最后:

以上就是本篇文章的内容了,感谢你的阅读。

如果感到有所收获的话可以给博主点一个哦。

如果文章内容有遗漏或者错误的地方欢迎私信博主或者在评论区指出~

目录
打赏
0
0
0
0
339
分享
相关文章
|
8月前
|
【算法】滑动窗口——最大连续1的个数
【算法】滑动窗口——最大连续1的个数
105 0
|
19天前
|
基于 PHP 语言的滑动窗口频率统计算法在公司局域网监控电脑日志分析中的应用研究
在当代企业网络架构中,公司局域网监控电脑系统需实时处理海量终端设备产生的连接日志。每台设备平均每分钟生成 3 至 5 条网络请求记录,这对监控系统的数据处理能力提出了极高要求。传统关系型数据库在应对这种高频写入场景时,性能往往难以令人满意。故而,引入特定的内存数据结构与优化算法成为必然选择。
23 3
|
8月前
|
【算法】滑动窗口——最小覆盖子串
【算法】滑动窗口——最小覆盖子串
|
8月前
|
【算法】滑动窗口——找到字符串中所有字母异位词
【算法】滑动窗口——找到字符串中所有字母异位词
100 0
|
8月前
|
【算法】滑动窗口——将x减到0的最小操作数
【算法】滑动窗口——将x减到0的最小操作数
|
8月前
|
【算法】滑动窗口——无重复字符的最长子串
【算法】滑动窗口——无重复字符的最长子串
|
8月前
|
【算法】滑动窗口——长度最小的子数组
【算法】滑动窗口——长度最小的子数组
【算法】滑动窗口——串联所有单词的子串
【算法】滑动窗口——串联所有单词的子串

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等