【算法系列-数组】长度最小的子数组(滑动窗口)

news2024/9/28 17:25:57

【算法系列-数组】长度最小的子数组(滑动窗口)

文章目录

  • 【算法系列-数组】长度最小的子数组(滑动窗口)
    • 1. 长度最小的子数组(LeetCode 209)
      • 1.1 算法分析🛸
      • 1.2 解题思路🎯
      • 1.3 解题过程🎬
      • 1.4 代码举例🌰
    • 2. 水果成篮(LeetCode 904)
      • 2.1 解题思路🎯
      • 2.2 解题过程🎬
      • 2.3 代码举例🌰

1. 长度最小的子数组(LeetCode 209)

1.1 算法分析🛸

这种求特定要求子数组的题可以使用暴力解决,但最终的时间复杂度都是比较大的(有时甚至会超时),对此,我们需要借用滑动窗口✅的方式来解决这类题:

【题目链接】

1.2 解题思路🎯

这道题关键在于需要确定好窗口的起始位置以及终止位置,每当窗口集合的值大于目标值,就将窗口集合长度与返回值作比较,二者取最小并赋值给返回值,之后记得要将窗口的起始位置往后挪动,这一步还需要将窗口集合的值减掉起始位置移动掉的部分,即窗口缩小(窗口越小则返回值就越小),同时移动后的窗口集合的值依旧大于等于目标值的话,代表窗口还可以继续缩小,则重复上述过程,直到窗口无法缩小再移动终止位置

1.3 解题过程🎬

初始设置 返回值 ret 的长度为最大值,这样后面才能进行最小值的比较 定义 i 为 窗口起始位置,循环中的索引 j 为 窗口终止位置 进入循环后,sum += nums[j],加完后进行判断:若总和大于等于目标值target,计算出此时窗口的长度,即 j - i + 1,并与ret进行比较,取最小值并赋值给ret, 同时sum 减掉 当前窗口起始位置的值 nums[i],并将窗口起始位置向后移动一格,即 i++,若修改后的sum依旧大于等于target,重复上述过程; 若总和小于目标值target,窗口终止位置继续向后走,即 j++ ; 直到循环结束窗口终止位置遍历完,判断ret是否发生改变,发生改变则返回ret即可,否则按要求返回0

1.4 代码举例🌰

class Solution {
    public int minSubArrayLen(int target, int[] nums) {
        int i = 0;
        int sum = 0;
        int ret = Integer.MAX_VALUE;
        for (int j = 0;j < nums.length;j++) {

            sum += nums[j];
            while (sum >= target) {
                int subLen = j - i + 1;
                ret = Math.min(ret, subLen);
                sum -= nums[i++];
            }
        }
        return ret == Integer.MAX_VALUE ? 0 : ret;
    }
}

2. 水果成篮(LeetCode 904)

【题目链接】

2.1 解题思路🎯

这道题可以使用滑动窗口来解决问题,关键在于我们需要找到让窗口起始值移动的条件,那就是篮子中不同种类的水果超过2,这个时候就需要移动窗口来使篮子里的水果种类减少一种

2.2 解题过程🎬

定义一个hash表用来统计篮子里的水果种类以及数量,当map中的水果种类超过二时,通过移动窗口来减少窗口中第一个出现的水果的数量,直到第一种水果在map中被清空,退出循环,并计算最大值,重复上述过程直到窗口终止位置结束

2.3 代码举例🌰

class Solution {
    public int totalFruit(int[] fruits) {
        int i = 0;
        Map<Integer, Integer> map = new HashMap<>();
        int ret = 0;
        for (int j = 0;j < fruits.length;j++) {

            map.put(fruits[j], map.getOrDefault(fruits[j], 0) + 1);
            while (map.size() > 2) {
                int v = fruits[i++];
                map.put(v, map.get(v) - 1);
                if (map.get(v) == 0) {
                    map.remove(v);
                }
            }
            ret = Math.max(ret, j - i + 1);
        }
        return ret;
    }
}

以上便是对长度最小子数组类算法的介绍了!!后续还会继续分享其它算法系列内容,如果这些内容对大家有帮助的话请给一个三连关注吧💕( •̀ ω •́ )✧( •̀ ω •́ )✧✨

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2174221.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

VulnHub-SickOs1.1靶机笔记

SickOs1.1靶机笔记 概述 Vulnhub的靶机sickos1.1 主要练习从互联网上搜取信息的能力&#xff0c;还考察了对代理使用&#xff0c;目录爆破的能力&#xff0c;很不错的靶机 靶机地址&#xff1a; 链接: https://pan.baidu.com/s/1JOTvKbfT-IpcgypcxaCEyQ?pwdytad 提取码: yt…

AFSim仿真系统 --- 系统简解_02(向导模块)

向导 向导是AFSIM的集成开发环境。它提供了视觉和基于文本的工具&#xff0c;以简化场景的开发和执行。 向导支持嵌入式执行基于文本的WSF应用程序&#xff0c;例如任务和传感器图&#xff0c;并提供快捷方式以方便启动其他WSF视觉应用程序&#xff0c;如Warlock和Mystic。 核…

图解IRF

FW1 配置思路 ① 配置IRF优先级 确认设备的主次 ② 设置批量操作的接口方便后续操作 interface range name fw-irf interface GigabitEthernet1/0/2 to GigabitEthernet1/0/3 ③ 接口 showdown 关闭接口 ④ 创建的IRF 1/1 成员的对应的接口的是 GE1/0/2 GE/1/0/3 ⑤ 开放IRF对…

Mathematica线性优化-单纯形/改善单纯形/内点法

引言 Mathematica提供了多种工具和函数来实现线性优化&#xff0c;这些工具可以处理从简单的线性规划问题到复杂的多变量优化问题&#xff0c;最近运筹学作业要熟悉线性优化的编程方法&#xff0c;我们就使用mathematica进行&#xff1a;所有运行代码都在文章上面的资源中&…

Python | Leetcode Python题解之第435题无重叠区间

题目&#xff1a; 题解&#xff1a; class Solution:def eraseOverlapIntervals(self, intervals: List[List[int]]) -> int:if not intervals:return 0intervals.sort(keylambda x: x[1])n len(intervals)right intervals[0][1]ans 1for i in range(1, n):if intervals…

c++速成 01 数据类型与基本运算符

文章目录 前言整型整型短整型长整型无符号整型 浮点型单精度双精度长双精度 变量命名规则&#xff1a;局部变量 全局变量基本运算符算术运算符&#xff1a;赋值运算符比较运算符逻辑运算符位运算符杂项运算符运算符间的优先级 前言 写在前面&#xff1a;本笔记参考b站视频【《…

从零开始手写STL库:Stack

从零开始手写STL库–Stack的实现 Gihub链接&#xff1a;miniSTL 文章目录 从零开始手写STL库–Stack的实现一、stack是什么&#xff1f;二、stack要包含什么函数总结 一、stack是什么&#xff1f; 栈是一种后进先出&#xff08;LIFO&#xff0c;Last In First Out&#xff09…

前端常用动画 直接可以用的代码加详细流程和案例 能应付90%的开发场景

前端项目&#xff0c;特别是Toc的项目&#xff0c;一定少不了各种动效和动画效果。 葫芦七兄弟&#xff1a; CSS 动画 优点&#xff1a;兼容性强&#xff1b;浏览器针对的流畅度优化&#xff1b;语法简单&#xff1b;某些属性&#xff08;如 transform 和 opacity&#xff09;…

CSS 的背景样式

1.1 背景颜色 1.2 背景图片 1.3 背景平铺 1.4 背景图片位置 1.4.1 方位名词 1.4.2 精确单位 1.4.3 混合单位 1.5 背景图像固定 1.6 背景复合写法 1.7 背景色半透明 1.8 总结

Json-Rpc框架(Muduo库快速上手)

阅读导航 引言一、Muduo库简介二、Muduo库常见接口1. TcpServer类基础介绍2. EventLoop类基础介绍3. TcpConnection类基础介绍4. TcpClient类基础介绍5. Buffer类基础介绍 三、Muduo库使用示例⭕英译汉服务器⭕英译汉客户端 引言 在上一篇文章中&#xff0c;我们简要介绍了在项…

业务资源管理模式语言19

相关模式&#xff1a; 如果你考虑类“Resource Maintenance”和“Part used in maintenance”&#xff0c;那么是“Transaction-Transaction Line Item”模式的一个特例[Coa 97]。如果你考虑类“Part”和“Part used in maintenance”&#xff0c;那么是“Item Line Item”模式…

力扣 简单 104.二叉树的最大深度

文章目录 题目介绍解法 题目介绍 解法 如果知道了左子树和右子树的最大深度 l 和 r&#xff0c;那么该二叉树的最大深度即为max(l,r)1&#xff0c;而左子树和右子树的最大深度又可以以同样的方式进行计算。因此我们可以用递归的方法来计算二叉树的最大深度。具体而言&#xff…

动态规划(有背包问题)

目录 1.动态规划的介绍 2.动态规划的例题 第1道题 数字三角形 (如果想看递归写法可以到我的记忆化递归里去看看记忆化递归_将递归程序记忆化-CSDN博客) 第2道题最长公共子序列(模板) 第3道题 最长上升子序列 第4道题最大子段和 背包系列问题 01背包 完全背包 1.动态规…

scrapy爬虫基础

一、初识 创建项目&#xff1a; scrapy startproject my_one_project # 创建项目命令 cd my_one_project # 先进去&#xff0c; 后面在里面运行 运行爬虫命令为&#xff1a;scrapy crawl tk spiders下创建test.py 其中name就是scrapy crawl tk &…

LeetCode讲解篇之5. 最长回文子串

文章目录 题目描述题解思路题解代码 题目描述 题目链接 题解思路 从中心点先寻找和中心点相等的左右端点&#xff0c;在基于左右端点进行往外扩散&#xff0c;直至左右端点不相等或者越界&#xff0c;然后左右端点这个范围内就是我们找寻的回文串&#xff0c;我们遍历中心点…

VS Code 配置 Anaconda Python 环境

VS Code 配置 Anaconda Python 环境 董同学是使用 PyCharm 进行 python 开发的老选手了&#xff0c;但同事们都在用 VS Code。为了更好的和大家交流&#xff0c;转身投入 VS Code 的怀抱&#xff08;当然我都要&#xff09;。当我兴致盎然打开 VS Code 软件&#xff0c;真丝滑…

自动化测试实例:Web登录功能性测试(无验证码)

&#x1f345; 点击文末小卡片 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 一、什么是自动化测试 把人为驱动的测试行为转化为机器执行的一种过程称为自动化测试。(来自百度百科)本质上来说&#xff0c;自动化测试对比起手工测试除了需要…

自动化check是不是测试?

这篇文章是reddit上关于质量保障讨论的比较多的帖子&#xff0c;我把它转为中文版&#xff0c;供大家交流学习&#xff0c;由于直接用的翻译软件以及截图&#xff0c;大家凑合看下哈。 自动化检查并不是真正的“测试”&#xff1f;编写自动化检查确实很重要——但编写自动化测…

笔记整理—linux进程部分(1)进程终止函数注册、进程环境、进程虚拟地址

对于mian()函数而言&#xff0c;执行前也需要先执行一段引导代码才会去执行main()函数&#xff0c;该部分的代码包含构建c语言的运行环境等配置&#xff0c;如清理bss段等。 在使用gcc去编译程序的时候&#xff0c;使用gcc -v xxx.c可见链接过程。在编译完成后可见xxx.out文件。…

[产品管理-33]:实验室技术与商业化产品的距离,实验室技术在商业化过程中要越过多少道“坎”?

目录 一、实验室技术 1.1 实验室研究性技术 1.2 技术发展的S曲线 技术发展S曲线的主要阶段和特点 技术发展S曲线的意义和应用 二、实验室技术商业化的路径 2.1 实验室技术与商业化产品的距离 1、技术成熟度与稳定性 - 技术自身 2、市场需求与适应性 - 技术是满足需求 …